Ist löschen erlaubt?

Ist es erlaubt delete this; wenn der delete-Anweisung ist die Letzte Anweisung, die ausgeführt werden, auf diese Instanz der Klasse? Natürlich bin ich sicher, dass das Objekt, vertreten durch die this-Zeiger ist newly erstellt.

Ich denke über so etwas wie dieses:

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;
}

Kann ich tun?

Hauptproblem würde sein, dass, wenn Sie delete this Sie haben eine enge Kopplung zwischen der Klasse und die Mittelzuweisung Methode für die Erstellung von Objekten der Klasse. Das ist sehr schlechtes OO-design, da die meisten grundlegende Sache bei der OOP ist die autonome Klassen, die nicht wissen oder kümmern uns um das, was Ihre Anrufer zu tun. Also ein richtig Klasse sollte nicht wissen, oder kümmern uns um, wie es zugeteilt wurde. Wenn Sie aus irgendeinem Grund brauchen einen eigenartigen Mechanismus, denke ich, ein besseres design würde die Verwendung einer wrapper-Klasse um die eigentliche Klasse, und lassen Sie die wrapper befassen sich mit der Aufteilung.

InformationsquelleAutor Martijn Courteaux | 2010-06-30

Schreibe einen Kommentar