2016-01-20 48 views
0

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

我得到的基类名为Worker与私人字段名称和一个派生类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() 
{ 

} 
+2

'工作人员'有一个'虚拟'析构函数吗? – Praetorian

+2

你可以显示'Worker'&'Builder'的实现吗 –

+0

工作者的析构函数是空白的,因为只有private:string名字; –

回答

0

你需要让工人析构函数虚拟的,这样它会破坏它的生成器和它的任何成员,而不仅仅是工人。

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

相关问题