ptr_vector<A>::release
возвращает ptr_vector<A>::auto_type
, что является своего рода легким интеллектуальным указателем в том смысле, что когда элемент auto_type
выходит из области видимости, объект, на который он указывает, автоматически удаляется. Чтобы восстановить необработанный указатель на объект и предотвратить его удаление с помощью auto_ptr
, который его удерживает, вам также необходимо вызвать release
для этого:
int main() {
ptr_vector<A> v;
v.push_back(new A);
A *temp=v.release(v.begin()).release();
delete temp;
return 0;
}
Первый release
говорит ptr_vector
отказаться от него; второй приказывает auto_ptr
также отказаться от него.