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

Memory leak when adding an object to vector<unique_ptr<Type>>

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

我得到了一个名为 Worker 的基 class 和一个带有私有字段名的 Derived class Builder

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

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

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

编辑:

我这样释放vector的内存:

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()
{

}

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

我猜也有一些虚拟方法被 Builder 覆盖了,它基本上是一个规则,class 使用虚拟方法必须有一个虚拟析构函数 - 或者受保护的析构函数,这样 delete 就不能被调用(这会当然要防止在 unique_ptr).

中使用它