c++ - 将指针 push_back 到指针 vector 中是内存泄漏吗?

标签 c++ pointers memory-leaks vector c++11

在我的类中,我有一个成员变量std::vector<node*> children

下面的类成员函数会造成内存泄漏吗?

//adds a child node
{
    node* child = new node("blah","blah","blah");
    child->Set_Parent(this);
    children.push_back(child);  //<- Is this ok?
}

vector 复制了一个指针,我有两个指向同一内存的指针, 然后原始指针超出范围,对吗?

这可能简单明了,但我只想确认我的假设。
谢谢

最佳答案

这不是泄漏……还不是。但是,如果 vector超出范围,或者你erase , pop_back或者做一些其他的事情从 vector 中删除元素,而不是先 delete处理您要删除的元素,您的手上会漏水。

正确的方法是改变使用 vector<node *>vector<unique_ptr<node>> .您的代码将更改为

//adds a child node
{
    node* child = new node("blah","blah","blah");
    child->Set_Parent(this);
    children.push_back(std::unique_ptr<node>(child));
}

或使用 boost::ptr_vector<node>如果你可以使用 Boost。

关于c++ - 将指针 push_back 到指针 vector 中是内存泄漏吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12444723/

相关文章:

swift3 - UIImagePickerController 在启动后和拍照期间内存泄漏。拍摄超过 100 张照片后使应用程序崩溃

c - 在 C 中有一些内存泄漏

ruby-on-rails - Rails csv导入内存消耗问题postgres

c++ - 什么是 undefined reference /未解析的外部符号错误以及如何修复它?

c++ - 对 R 值的常量引用

c - 基本函数指针误解

c++ 指向 int 指针的指针

C++ map 插入和查找性能和存储开销

c++ - Visual C++ 2010,右值引用错误?

在 C 中创建和初始化用户定义类型的数组