Est de supprimer ce possible?

Est-il permis de delete this; si la suppression de l'instruction est la dernière instruction qui sera exécutée sur l'instance de la classe? Bien sûr, je suis sûr que l'objet représenté par la this-pointeur est newly-créé.

Je suis en train de réfléchir à quelque chose comme ceci:

void SomeModule::doStuff()
{
    //in the controller, "this" object of SomeModule is the "current module"
    //now, if I want to switch over to a new Module, eg:

    controller->setWorkingModule(new OtherModule());

    //since the new "OtherModule" object will take the lead, 
    //I want to get rid of this "SomeModule" object:

    delete this;
}

Puis-je faire cela?

Principal problème serait que si vous delete this vous avez créé un couplage étroit entre la classe et de la méthode de répartition utilisée pour créer des objets de cette classe. Qui est de mauvaise OO conception, puisque la chose la plus fondamentale en programmation orientée objet est de rendre autonome les classes qui ne savent pas ou se soucient de ce que leur interlocuteur est en train de faire. Ainsi, un plan bien conçu classe ne sais pas ou se soucient comment il a été affecté. Si vous pour une raison quelconque besoin d'un tel mécanisme particulier, je pense qu'un meilleur design serait d'utiliser une classe wrapper autour de la classe réelle, et de laisser le wrapper traitent de la répartition.

OriginalL'auteur Martijn Courteaux | 2010-06-30