#include <boost/ptr_container/ptr_vector.hpp>
#include <iostream>
using namespace std;
using namespace boost;
struct A {
~A() { cout << "deleted " << (void*)this << endl; }
};
int main() {
ptr_vector<A> v;
v.push_back(new A);
A *temp = &v.front();
v.release(v.begin());
delete temp;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
输出:
Run Code Online (Sandbox Code Playgroud)deleted 0x300300 deleted 0x300300 c(6832) malloc: *** error for object 0x300300: double free
Hea*_*eek 15
ptr_vector<A>::release返回a 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;
}
Run Code Online (Sandbox Code Playgroud)
第一个release告诉ptr_vector他放弃; 第二个告诉auto_ptr它也放弃了.
| 归档时间: |
|
| 查看次数: |
2397 次 |
| 最近记录: |