将对象添加到向量<unique_ptr <type>&gt;

时间:2016-01-20 23:26:46

标签: c++ vector memory-leaks unique-ptr

我正在使用Visual Leak Detector,它说我在向vector<unique_ptr<Worker>> Workers添加对象时发生内存泄漏。

我得到了一个名为Worker的基类,其私有字段名称和一个带有私有int砖的派生类Builder

这就是我将新对象添加到vector Workers的方式。

    Builder b = Builder(name, stoi(bricks));
    Workers.push_back(make_unique<Builder>(b)); // this is the line with memory leak

你能告诉我在这种情况下我该怎么办才能防止内存泄漏吗?

编辑:

我释放了这样的矢量记忆:

vector<unique_ptr<Worker>>().swap(Workers);

Worker & Builder

的实施
Worker::Worker(string name)
{
    this->_name = name;
}

工人的析构函数是空白的。

Worker::~Worker()
{

}

Builder::Builder(string name, int bricks) : Worker(name)
{
    this->_bricks = bricks;
}

Builder的析构函数是空白的。

Builder::~Builder()
{

}

1 个答案:

答案 0 :(得分:0)

您需要将Worker析构函数设置为虚拟,以便将其作为Builder及其任何成员销毁,而不仅仅是作为Worker。

我想也有一些被Builder重写的虚拟方法,基本上规则是带有虚方法的类必须有一个虚析构函数 - 或者受保护的析构函数,以便不能在其上调用delete(这当然会阻止它在的unique_ptr)。