7
votes

Comment supprimer un objet (classe) via la méthode destructeur

Je suis émerveillé de savoir s'il est possible de supprimer un objet par la méthode destructeurs?

constructeur et destructeur de ma classe: p> xxx pré>

Comment puis-je supprimer cette Pointeur à travers la classe? p>

PS fort> p>

J'ai oublié d'écrire le code suivant p> xxx pré> je veux Pour l'utiliser dans le tas, pas la pile p>

Je veux utiliser fréquemment cette classe (beaucoup de cet objet) Imaginez combien de temps dois-je écrire Supprimer et faire de la compréhension difficile, de dépannage et de traçage des codes que je veux Ils ont été détruits automatiquement (en tas) p>

J'ai utilisé après le code suivant dans ma classe lorsque j'exécute "Supprimer [] calendrier", il réduit mes bélicitations occupées (quantité de RAM utilisée) fonctionnent-elles correctement ( Détruire tous les objets) en sortant du programme? Parce que j'utilise gnu / linus et qu'il détruit tous les objets avec ou sans ces lignes, je suis préoccupé par la fuite dans Windows P>

void DisposeObject() { delete this; }


3 Réponses :


3
votes

Je suis merveille à savoir qu'il est possible de supprimer un objet par la méthode destructeurs

Même supposant que c'était valide - le problème est que rien ne serait jamais l'appel le destructeur, de sorte que cela n'aurait jamais d'effet. Le destructeur est appelé lorsque le code d'appel supprime l'objet, qui peut à son tour supprimer tous les objets internes au besoin.

Dans votre cas, il ne semble pas que vous ayez besoin de faire quoi que ce soit dans votre destructeur, cependant, car vous n'avez pas de ressources allouées qui doivent être explicitement supprimées (au moins dans ce que vous exposez) .


0 commentaires

14
votes

non. Au moment où le destructeur est appelé, l'objet est déjà en train d'être détruit, alors supprimer ce n'est pas valide.

Le comportement est indéfini, mais probablement, il appellera le destructeur de manière récursive, conduisant à un débordement de la pile.


5 commentaires

Supprime ça; a défini des résultats, tant que vous assurez que l'objet a été alloué de manière dynamique et (bien sûr) n'essayez jamais d'utiliser l'objet après la détruire. Stackoverflow.com/questions/3150942/c-Delete-Chis


@Sergeyk.: Mais Supprimer ce n'est pas valide dans le destructeur, car il est déjà en train d'être détruit.


Bien sûr, mais ce n'est pas le cas général.


@Sergeyk.: Non, je ne suis que de répondre à la question qui a été posée: "Est-il possible de supprimer un objet par destructeurs", avec un exemple montrant un destructeur contenant supprimer ce . L'affaire Général n'est pas pertinente pour cette question.


La question est - "Comment puis-je supprimer ce pointeur par classe"



11
votes

Vous pouvez écrire le code comme celui-ci: xxx

et il appellera votre destructeur.

Vous ne devez pas appeler supprimer ce Votre destructeur car il appellera le destructeur de manière récursive, ce qui conduira peut-être à un débordement de la pile. Quoi qu'il en soit, le code que vous avez écrit souffre de comportement indéfini .

Reportez-vous à cette question pour une discussion approfondie: supprime cela permis?


1 commentaires

Mais quel est le point? par opposition à la suppression de l'objet?