Im Allgemeinen ist es eine schlechte Idee, wie Sie technisch in einer Member-Funktion sind, wenn Sie es tun und plötzlich jedes Mitglied dieser Klasse ist jetzt ungültig. Offensichtlich, wenn Sie nach dem delete this;
Anruf nichts berühren, werden Sie in Ordnung sein. Aber es ist sehr einfach, diese Dinge zu vergessen, versuchen Sie, auf eine Membervariable zuzugreifen und ein undefiniertes Verhalten zu erreichen, und verbringen Sie Zeit am Debugger.
Das heißt, es ist verwendet in Dinge wie Microsoft Component Object Model (COM), wenn eine Komponente Freigabe (beachten Sie, ist das nicht genau das, was sie tun, wie cashcow weist darauf hin, und ist nur zu Veranschaulichungszwecken):
void AddRef() { m_nRefs++; }
void Release()
{
m_nRefs--;
if(m_nRefs == 0)
delete this;
// class member-variables now deallocated, accessing them is undefined behaviour!
} // eo Release
Das heißt, in C++ haben wir intelligente Zeiger (wie boost::shared_ptr
), um die Lebenszeiten von Objekten für uns zu verwalten. Da COM interprozeßorientiert und von Sprachen wie VB aus zugänglich ist, waren intelligente Zeiger für das Designteam keine Option.
Siehe auch http://StackOverflow.com/q/1866193/57428 und http://StackOverflow.com/q/1866461/57428 – sharptooth