我正在使用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()
{
}
答案 0 :(得分:0)
您需要将Worker析构函数设置为虚拟,以便将其作为Builder及其任何成员销毁,而不仅仅是作为Worker。
我想也有一些被Builder重写的虚拟方法,基本上规则是带有虚方法的类必须有一个虚析构函数 - 或者受保护的析构函数,以便不能在其上调用delete(这当然会阻止它在的unique_ptr)。