examiner un projet assez vieux, j'ai trouvé l'extrait de code curieux suivant (uniquement le code extrait pertinent):Que pourrait signifier cette curieuse combinaison de "while" et "delete"?
class CCuriousClass {
~CCuriousClass();
CSomeType* object;
};
CCuriousClass::~CCuriousClass()
{
while(object != NULL) {
delete object;
}
}
Ai-je Supervisé quelque chose ou est-ce une route simple pour un comportement non défini?
Ce que je vois ici est que si object
est un pointeur NULL au point de CCuriousClass::~CCuriousClass()
étant appelé tout ira bien - aucune action prise - mais si object
est nul pas que ce sera une boucle infinie avec un comportement non défini à l'intérieur.
Est-ce probablement un bug ou une construction intelligente que je ne comprends pas?
Peut-être que quelque chose arrive à cet objet dans un thread différent? – Blindy
Je ne sais pas mais pouvez-vous surcharger l'opérateur "delete" d'un objet? –
@Mike, vous pouvez mais le destructeur d'objets sera toujours appelé. –