Есть ли противоречие между этими двумя источниками относительно шаблона класса `auto_ptr`? - PullRequest
8 голосов
/ 20 февраля 2012

На этом сайте указано " Владение, источники и приемники ":

"При копировании 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!

1 Ответ

4 голосов
/ 20 февраля 2012

Да, это определенно ошибка в последнем фрагменте кода.Объект, на который указывает ptr, должен иметь значение delete d, прежде чем новому значению будет присвоено ptr, в противном случае объект, на который изначально указан ptr, будет пропущен.

...