c++ - myVector.erase(myPtr) 是否删除 myPtr 指向的对象?

标签 c++ vector stl

如果我有下面的代码,

Foo *f = new Foo();
vector<Foo*> vect;
vect.push_back(f);
// do stuff
vect.erase(f);

我造成了内存泄漏吗? 我猜是的,但是erase这个词给人的感觉是在删除它。

写到这里,我想知道将指针放在 STL vector 中是否是错误的。你怎么看?

最佳答案

是的,您由此造成了内存泄漏。 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 boost 中的库。

关于c++ - myVector.erase(myPtr) 是否删除 myPtr 指向的对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/281365/

相关文章:

c++ - CUDA 和 C++ 函数问题 (Visual Studio 2013)

c++ - 在这种情况下,GCC 等现代编译器会执行尾例优化吗?

c++ - 继承自 std::vector

c++ - vector::erase 会减少 vector::capacity 吗?

c++ - 如何告诉 std::priority_queue 刷新其排序?

c++ - 如何将 vector 的第一个元素移动到另一个 vector 的末尾

c++ - 从二维数组 c++ 打印空格而不是整数

c++ - 使用 stackBefore 更改 QGraphicsItem 堆栈顺序

c++ - 在 Xcode 中传递指针时出错,但在 Windows 上的 Codeblocks 中有效

c++ - c++/mfc/STL 中两个数组的差异函数?