将指针push_back到指针向量是一个内存泄漏吗?

Tre*_*key 7 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?
}
Run Code Online (Sandbox Code Playgroud)

向量生成指针的副本,我有两个指向同一内存的指针,然后原始指针超出范围,对吗?

这可能很简单明了,但我想确认一下我的假设.
谢谢

Pra*_*ian 13

这不是泄漏...... 但是,如果vector超出范围,或你erase,pop_back或者做别的事情,可以消除向量元素,而无需首先delete荷兰国际集团,你删除你有你的手泄漏的元素.

正确的方法是从使用a更改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));
}
Run Code Online (Sandbox Code Playgroud)

或者使用,boost::ptr_vector<node>如果你可以使用Boost.

  • 最后一行可以简单地是`children.emplace_back(child);` (4认同)