向vector <unique_ptr <Type >>添加对象时发生内存泄漏

c++ vector memory-leaks unique-ptr

119 观看

1回复

282 作者的声誉

这个问题已经在这里有了答案:

我使用的是Visual Leak Detector,它说在向中添加对象时出现内存泄漏vector<unique_ptr<Worker>> Workers

我得到了Worker以私有字段名称命名的基类,并Builder以私有int砖命名了一个派生类。

这就是我向添加新对象的方式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::~Worker()
{

}

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

并且Builder的析构函数为空白。

Builder::~Builder()
{

}
作者: Da Artagnan 的来源 发布者: 2016 年 1 月 20 日

回应 (1)


0

4950 作者的声誉

决定

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

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

作者: axalis 发布者: 20.01.2016 11:50
32x32