Définition de pointeurs sur NULL dans un destructeur
Dans la programmation orientée objet, il est courant d'allouer de la mémoire de manière dynamique et de la libérer à l'aide de destructeurs. Considérons la classe suivante qui alloue de la mémoire pour un objet de type Bar :
<code class="cpp">class Foo { public: Foo() : bar(new Bar) { } ~Foo() { delete bar; } void doSomething() { bar->doSomething(); } private: Bar* bar; };</code>
La question se pose : est-il avantageux de définir le pointeur de la barre sur NULL dans le destructeur ?
Argument contre la définition de NULL
Contrairement à la croyance populaire, définir des pointeurs sur NULL dans le destructeur n'est pas recommandé. Bien que cela puisse sembler une bonne idée à des fins de débogage, cela pourrait potentiellement entraîner des problèmes cachés dans les versions.
Si le pointeur est défini sur NULL, une référence pendante à l'objet supprimé peut exister quelque part. Dans une version de débogage, cette référence serait détectée et déclencherait un crash diagnosticable. Cependant, dans une version release, le code bogué peut éviter d'utiliser le pointeur car il remarque qu'il est NULL, obscurcissant ainsi le problème sous-jacent.
Approche alternative
Au lieu de En définissant le pointeur sur NULL, une meilleure pratique consiste à le définir sur une mauvaise valeur de pointeur connue. De cette façon, toutes les références en suspens à l'objet supprimé tenteront toujours d'utiliser le pointeur, déclenchant un crash qui peut être plus facilement diagnostiqué et corrigé.
Par exemple, l'expression suivante pourrait être utilisée :
<code class="cpp">~Foo() { delete bar; if (DEBUG) bar = (bar_type*)(long_ptr)(0xDEADBEEF); }</code>
Cette approche permet de détecter les bogues potentiels dans les versions de débogage tout en garantissant que les versions de version détectent et plantent sur des références en suspens.
Conclusion
Pendant ce temps peut sembler une bonne idée de définir des pointeurs sur NULL dans les destructeurs, cela peut masquer des problèmes potentiels dans les versions de version. Au lieu de cela, il est recommandé de définir des pointeurs vers une mauvaise valeur connue en mode débogage pour faciliter le diagnostic et le débogage.
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!