Ich habe die folgende Klasse:
%Vor%Warum wird der Destruktor der Klasse B beim Verlassen der Funktion func aufgerufen? Gibt die Funktion getB eine Referenz an das Objekt B zurück? Wenn Klasse A am Ende der Funktion func noch existiert, warum wird der Destruktor von B aufgerufen?
Wenn Sie haben:
%Vor% Ein neues Objekt vom Typ B
wird aus einem Verweis auf die vorhandene Instanz von B
( B&
) erstellt. Hier wird nicht B::operator=
aufgerufen, sondern Kopierkonstruktor .
Jede Klasse hat einen Kopierkonstruktor (wenn Sie ihn nicht explizit hinzufügen, stellt der Compiler einen für Sie bereit). Es akzeptiert ein einzelnes Argument, das auf dieselbe Klasse verweist. Sie haben keinen Kopierkonstruktor in den obigen Code geschrieben, daher nehme ich an, dass der Compiler einen für Sie erstellt hat:
%Vor% So hat A::getB()
einen Verweis auf das Element A::b
zurückgegeben, und dieser Verweis wurde als Argument an B::B(B&)
übergeben.
ruft den Kopierkonstruktor B(const& B)
auf, so dass Sie ein neues Objekt im Stapel mit einer Kopie des Objekts erstellen, das von der Referenz zurückgegeben wird.
Verwenden Sie stattdessen:
und kein Destruktor wird aufgerufen, da Sie kein neues B-Objekt erstellen
Tags und Links c++ reference destructor