2017-12-23 15 views
-4
class A{ 
/.../ 
}; 

class B{ 
    public: 
    A& foo() 
    { 
     A *bar = new A; 
     return *bar; 
    } 
}; 

int main() 
{ 
    A varA; 
    B varB; 
    varA = varB.foo(); 
    return 0; 
} 

Was passiert, wenn diese Zeile ausgeführt wird varA = varB.foo()? Wird (nach dem Kopieren/Verschieben des Zuweisungsoperatorfunktionsaufrufs) der Destruktor für das in foo erstellte Objekt aufgerufen?Zuweisen der Referenz, die von der Methode zur Variablen

+2

_ "Was passiert, wenn diese Zeile ausgeführt wird' varA = varB.foo() '" _ Ein Speicherleck – user0042

+1

'foo()' gibt einen Verweis auf ein Objekt auf dem Heap zurück. 'varA' wird von diesem Objekt kopiert, das dann durchgelassen wird. –

+1

Nein, der Destruktor des mit 'new' erstellten Objekts wird nicht aufgerufen. Gehen Sie zu http://en.cppreference.com/w/cpp/language/new und nutzen Sie es als Ausgangspunkt, um mehr über das Thema zu erfahren. –

Antwort

1

Der Destruktor wird nicht aufgerufen, das zugeordnete Objekt wird undicht.

+0

Es sei denn, 'A's Kopierkonstruktor macht etwas Seltsames. – juanchopanza

Verwandte Themen