Diese Website gibt " Besitz, Quellen und Sinks ": "Wenn Sie ein Betrachten Sie nun die Definition von Ich kann nicht sehen, dass der Operator das von 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. ". 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; }
ptr
adressierte Objekt freigibt, falls ptr != 0
!
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.