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>
Y compris l'opérateur
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>
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!