Referenz und Destruktor in C ++

7

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?

    
Shay 29.05.2012, 14:58
quelle

2 Antworten

6

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.

%Vor%     
Bojan Komazec 29.05.2012, 15:30
quelle
20
%Vor%

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:

%Vor%

und kein Destruktor wird aufgerufen, da Sie kein neues B-Objekt erstellen

    
lezebulon 29.05.2012 15:00
quelle

Tags und Links