2017-06-21 5 views
-2

Ich habe eine grundlegende Frage über gemeinsame Zeiger, im nächsten Beispiel Code:Erneutes Zuweisen eines gemeinsamen Zeigers zu operator = verursacht Speicherverlust?

int main() { 
std::shared_ptr<int> sp; // empty 
std::shared_ptr<int> sp2; 
sp.reset (new int); 
sp2.reset (new int); 
*sp=10; 
*sp2=400; 
    sp2=sp; 

std::shared_ptr<int> sp3; 
sp3=sp1; 
//what happens with the int of value 400? 
//more code 
} 

, was mit dem int Wert 400 passiert? ist das ein Speicherleck? Dies ist ein grundlegendes Beispiel, aber wenn statt int die Zeiger auf eine große Klasse zeigen, dann wäre es problematisch, wenn ein Speicherleck vorhanden wäre, und mehr, wenn sp2 mehrmals neu zugewiesen wird. danke!

+0

Wollten Sie '* sp = 10' schreiben? Es würde mehr Sinn ergeben, wenn du 'sp = std :: make_shared (10);' meinst. –

+0

yea sorry vergessen diese Zeilen –

+2

Natürlich gibt es kein Leck, da 'sp2' der einzige Besitzer des int ist, der 400 enthält, wird es zerstört, bevor' sp2' den gemeinsamen Besitz des Speichers übernimmt, der 'sp' gehört. – Praetorian

Antwort

2

Nach Ihren Änderungen gibt es keine Lecks. Der dem int zugewiesene Speicher mit dem Wert 400 wird in der Zuweisung einfach für Sie gelöscht.

Verwandte Themen