Maison > développement back-end > C++ > Comment remplacer universellement les opérateurs globaux « nouveau » et « supprimer » dans les grandes bases de code ?

Comment remplacer universellement les opérateurs globaux « nouveau » et « supprimer » dans les grandes bases de code ?

Barbara Streisand
Libérer: 2024-11-03 13:08:02
original
700 Les gens l'ont consulté

How to Universally Override Global `new` and `delete` Operators in Large Codebases?

Remplacer efficacement les opérateurs globaux de création et de suppression

Problème :

Remplacement des opérateurs globaux nouveau et Les opérateurs de suppression pour utiliser la gestion de mémoire personnalisée présentent des défis dans les bases de code à grande échelle. Il n'est pas pratique d'inclure le fichier d'en-tête contenant les surcharges dans chaque fichier. Comment garantir l'adoption universelle de ces surcharges ?

Solution :

Le remplacement des opérateurs new et delete est un processus effectué au moment de la liaison. En créant une unité de traduction (TU) distincte qui définit les opérateurs et en la liant au projet, on peut remplacer globalement les opérateurs par défaut sans modifier la base de code existante.

Exemple de code :

Voici un exemple de TU définissant les opérateurs new et delete :

<code class="cpp">// optional_ops.cpp

void * operator new(std::size_t n) throw(std::bad_alloc)
{
  //...
}

void operator delete(void * p) throw()
{
  //...
}</code>
Copier après la connexion

Y compris l'opérateur l'en-tête n'est pas requis car les déclarations de l'opérateur new et de l'opérateur delete sont codées en dur dans le langage. Cependant, des noms tels que std::bad_alloc et std::size_t peuvent devoir être déclarés.

Alternative pour C 11 et versions ultérieures :

C 11 introduit une manière plus simple de définir la nouvelle surcharge, en utilisant decltype(sizeof(0)) pour déterminer le type du paramètre size :

<code class="cpp">void * operator new(decltype(sizeof(0)) n) noexcept(false)
{
  //...
}</code>
Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal