auto_ptr освобожден без присвоения его возвращаемого значения - PullRequest
1 голос
/ 16 января 2010

Так что же происходит с указателем, если вы освобождаете объект, принадлежащий auto_ptr, но фактически не присваиваете его необработанному указателю? Кажется, что он должен быть удален, но у него никогда не будет шанса. Так он просочился "в дикую природу"?

void usingPointer(int* p); 

std::auto_ptr<int> point(new int);
*point = 3;

usingPointer(point.release());

Примечание: я больше не использую auto_ptr, сейчас я использую tr1 :: shared_ptr. Эта ситуация просто заинтересовала меня.

Ответы [ 2 ]

3 голосов
/ 16 января 2010

Если usingPointer не вызывает delete на p, это утечка памяти. Если вы наберете get вместо release, то память будет автоматически удалена, когда point выйдет из области.

2 голосов
/ 16 января 2010

release не предполагается удалять принадлежащую точку из документов:

Устанавливает внутренний указатель auto_ptr в нулевой указатель (который указывает, что он указывает на отсутствие объекта) без разрушения объекта, на который в данный момент указывает auto_ptr.

Также излишне заменять все варианты использования вашего auto_ptr на tr1::shared_ptr - вы должны использовать unique_ptr, если общий не нужен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...