На этом сайте указано " Владение, источники и приемники ":
"При копировании auto_ptr
вы автоматически передаете право собственности из источникаauto_ptr
к цели auto_ptr
; , если цель auto_ptr
уже владеет объектом, этот объект сначала освобождается . После копирования только цель auto_ptr
владеет указателем и удаляет егов свое время, пока источник возвращается в нулевое состояние и больше не может использоваться для ссылки на принадлежащий объект. ".
Теперь рассмотрим определение operator=()
для templacte<classX> class auto_ptr
, вГлава 14, стр. 368 Страуструпа Язык программирования C ++, третье издание :
auto_ptr& operator=(auto_ptr& a) throw() { ptr = a.ptr; a.ptr = 0; }
Я не вижу оператора, освобождающего объект, адресуемый ptr
В случае ptr != 0
!