如果我有以下代码,
Foo *f = new Foo();
vector<Foo*> vect;
vect.push_back(f);
// do stuff
vect.erase(f);
Run Code Online (Sandbox Code Playgroud)
我是否创建了内存泄漏?我想是这样,但是擦除这个词让人感觉它正在删除它.
写这个,我想知道将指针放在STL向量中是不是错误.你怎么看?
是的,你创建了内存泄漏.std :: vector和其他容器只会删除指针,它们不会释放指针指向的内存.
将指针放入标准库容器中并不罕见.但问题是,从容器中删除时必须跟踪删除它.一个更好但更简单的方法是使用boost :: shared_ptr:
{
boost::shared_ptr<foo> f(new foo);
std::vector< boost::shared_ptr<foo> > v;
v.push_back(f);
v.erase(v.begin());
} /* if the last copy of foo goes out of scope, the memory is automatically freed */
Run Code Online (Sandbox Code Playgroud)
下一个C++标准(通常称为C++ 1x和C++ 0x)将包括std::shared_ptr.在那里,你也可以使用std::unique_ptr<T>哪个更快,因为它不允许复制.std::unique_ptr在c ++ 0x中使用容器类似于ptr_containerboost中的库.
| 归档时间: |
|
| 查看次数: |
3424 次 |
| 最近记录: |