This site stany na „własności, Sources i zlewy”:Czy istnieje sprzeczność między tymi dwoma źródłami o klasie szablonu "auto_ptr"?
„Podczas kopiowania auto_ptr
, automatyczne przeniesienie własności ze źródła auto_ptr
do celu auto_ptr
; jeśli cel auto_ptr
już właścicielem obiektu , obiekt ten jest najpierw zwalniany. Po skopiowaniu, tylko obiekt docelowy auto_ptr
jest właścicielem wskaźnika i usunie go w odpowiednim czasie, podczas gdy źródło zostanie przywrócone do stanu zerowego i nie może już być używane do odwoływania się do posiadanego obiektu. ".
Rozważmy teraz definicję operator=()
dla templacte<classX> class auto_ptr
, w rozdziale 14, strona 368 Stroustrup na C++ Programming Language Third Edition:
auto_ptr& operator=(auto_ptr& a) throw() { ptr = a.ptr; a.ptr = 0; }
nie widzę operator uwalniając przedmiot adres: ptr
, w przypadku ptr != 0
!
Coś innego podejrzanego: że 'operator =' nie zwraca niczego. – Mat
@sbi Język programowania w C++ Third Edition – Belloc
Jaki jest typ 'ptr'? Czy to 'classX *' lub 'auto_ptr_guts'? Jeśli to drugie, powyższy kod byłby dość banalny. –
MSalters