将对象添加到向量时发生内存泄漏<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).
中使用它
我正在使用 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).
中使用它