Gibt es einen Widerspruch zwischen diesen beiden Quellen bezüglich der Template-Klasse 'auto_ptr'?

8

Diese Website gibt " Besitz, Quellen und Sinks ":

"Wenn Sie ein auto_ptr kopieren, übertragen Sie automatisch Eigentum von der Quelle auto_ptr auf das Ziel auto_ptr ; Wenn das Ziel auto_ptr bereits ein Objekt besitzt, wird dieses Objekt zuerst freigegeben. Nach der Kopie besitzt nur das Ziel auto_ptr den Zeiger und löscht es zu gegebener Zeit, während die Quelle auf einen Null-Zustand zurückgesetzt wird und nicht mehr verwendet werden kann, um auf das Objekt im Besitz zu verweisen. ".

Betrachten Sie nun die Definition von operator=() für templacte<classX> class auto_ptr in Kapitel 14, Seite 368 von Stroustrups C ++ Programmiersprache dritte Ausgabe :

auto_ptr& operator=(auto_ptr& a) throw() { ptr = a.ptr; a.ptr = 0; }

Ich kann nicht sehen, dass der Operator das von ptr adressierte Objekt freigibt, falls ptr != 0 !

    
Belloc 20.02.2012, 11:56
quelle

1 Antwort

4

Ja, das ist definitiv ein Fehler im letzten Code. Objekt, auf das von ptr gezeigt wird, muss delete d sein, bevor ein neuer Wert ptr zugewiesen wird, andernfalls wird das Objekt, auf das ursprünglich von ptr gezeigt wurde, durchgesickert.

    
sharptooth 20.02.2012, 12:01
quelle

Tags und Links