如果我有以下代码,
Foo *f = new Foo();
vector<Foo*> vect;
vect.push_back(f);
// do stuff
vect.erase(f);
我是否造成了内存泄漏?
我想是的,但是这个词erase给人一种正在删除的感觉。
写到这里,我想知道将指针放入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 */
下一个 C++ 标准(通常称为 C++1x 和 C++0x)将包括std::shared_ptr
。在那里,您还可以使用std::unique_ptr<T>
这更快,因为它不允许复制。使用std::unique_ptr
c++0x 中的容器类似于ptr_container
图书馆在升压。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)