Так что же происходит с указателем, если вы освобождаете объект, принадлежащий auto_ptr, но на самом деле не назначаете его необработанному указателю? Похоже, он должен быть удален, но у него никогда не будет возможности. Так ли это просочилось «в дикую природу»?auto_ptr освобожден без присвоения его возвращаемого значения
void usingPointer(int* p);
std::auto_ptr<int> point(new int);
*point = 3;
usingPointer(point.release());
Примечание: я больше не использую auto_ptr, теперь я использую tr1 :: shared_ptr. Эта ситуация мне только показалась любопытной.
Изменить * «Так ли оно просочилось« в дикую природу »?» * * * Так оно и получится ** выпущено ** «в дикую природу»? »*, И вы получите свой ответ, и вдохновение за именем. :) Да, 'release''ing освобождает' auto_ptr' всех управленческих обязанностей. – GManNickG
'usingPointer' * может * удалить его в этом примере. Однако, если вам нужен простой указатель, позволяя интеллектуальному указателю управлять объектом, вы должны использовать 'point.get()' (также с 'shared_ptr') – UncleBens