Этот сайт указывает на « Владение, источники и приемники »:
«Когда вы копируете auto_ptr
, вы автоматически передаете право собственности от источника auto_ptr
целевому auto_ptr
; если цель auto_ptr
уже владеет объектом, этот объект сначала освобождается . После копирования только цель auto_ptr
владеет указателем и удалит его в должное время, в то время как источник возвращается в нулевое состояние и больше не может использоваться для ссылки на принадлежащий объект. ".
Теперь рассмотрим определение operator = ()
для templacte
в главе 14, стр. 368 книги Страуструпа The C ++ Programming Language Third Edition. :
auto_ptr & operator = (auto_ptr & a) throw () {ptr = a.ptr; a.ptr = 0;}
Я не вижу, как оператор освобождает объект, на который обратился ptr
, в случае ptr! = 0
!