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> Comment puis-je supprimer cette Pointeur à travers la classe? p> J'ai oublié d'écrire le code suivant 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 :
Je suis merveille à savoir qu'il est possible de supprimer un objet par la méthode destructeurs p> blockQuote>
Même supposant que c'était valide - le problème est que rien ne serait jamais l'appel em> 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. P>
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) . p>
non. Au moment où le destructeur est appelé, l'objet est déjà en train d'être détruit, alors Le comportement est indéfini, mais probablement, il appellera le destructeur de manière récursive, conduisant à un débordement de la pile. P> supprimer ce code> n'est pas valide. p>
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 code> 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 code>. L'affaire Général n'est pas pertinente pour cette question.
La question est - "Comment puis-je supprimer ce pointeur par classe"
Vous pouvez écrire le code comme celui-ci: et il appellera votre destructeur. p> Vous ne devez pas appeler Reportez-vous à cette question pour une discussion approfondie: supprime cela permis? P> P> supprimer ce code> 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
Mais quel est le point? par opposition à la suppression de l'objet?
Pourquoi avez-vous besoin de? Pourquoi ne pas laisser appeler le code supprimer votre objet?
Si vous souhaitez enregistrer le problème de l'utilisateur, ne vous embêtez pas! S'ils sont intéressés par cela, ils devraient utiliser un pointeur intelligent.
Peut-être que ce n'est pas obligatoire i> de les utiliser. Et quelque part le long de la ligne, le mot
Supprimer code> sera utilisé
@chris il n'y a rien de mal à supprimer
ceci code>; C'est un idiome commun. Mais vous ne voulez pas le faire dans le destructeur.
@Jameskanze, est-il utilisé n'importe où à autre que la méthode code> version () code>? Je ne l'ai jamais vu utilisé autrement.
@chris dans la programmation OO, c'est fréquent. Un objet registre pour un certain nombre d'événements concernant ce qu'il représente, et lorsqu'un événement vient en indiquant ce qu'il représente n'est plus valide, il se supprime. (La gestion des transactions peut signifier qu'il enregistre la suppression à la fin de la transaction --- Il est assez difficile de faire rouler un objet supprimé. Mais ce n'est pas toujours le cas.)