我在我的程序中遇到了一点内存泄漏,这是我认为唯一可能的事情。
if (inputType == 'S')
{
SavingAccount* savingAccount = new SavingAccount();
inFile >> *savingAccount;
accounts.push_back(savingAccount);
}
虽然指针的向量在程序结束时被删除,但我有3个错误泄漏,这似乎与我拥有的3种类型的帐户相对应。也就是说,如果我在将指针放入向量后删除它,它也会删除向量中的条目(这是我所期望的)
有人知道如何解决这个问题吗?
编辑:
void Transaction::cleanUp()
{
for (int i = 0; i < accounts.size(); i++)
{
delete accounts[i];
}
accounts.clear();
}
清理添加的代码。
编辑:已解决
我的问题并不像类的析构函数那样与向量有太多关系。因为我没有定义虚拟析构函数,所以只有基类被擦除,留下了派生类的片段。添加这个后不会出现内存泄漏。
发布于 2012-09-21 08:13:26
为什么向量中需要指针?我没怎么看过你的代码,但如果你的SavingAccount
类是可复制构造的,下面的代码也可以很好地工作:
if (inputType == 'S')
{
SavingAccount savingAccount;
inFile >> savingAccount;
accounts.push_back(savingAccount); //puts a copy in the vector, so your class needs a copy ctor + Rule of Three applied.
}
编辑
看到OP说他有一个多态的类结构,那么OP应该使用std::unique_ptr
并将其存储在std::vector
中,或者考虑使用boost::ptr_vector
,它是为存储指针而设计的。
发布于 2012-09-21 08:12:17
使用std::unique_ptr<SavingAccount>
的std::vector
或循环向量,在向量超出范围或被删除之前删除所有元素。
发布于 2012-09-21 08:11:19
您可以在销毁向量之前删除,也可以将智能指针存储在向量中。
https://stackoverflow.com/questions/12526597
复制相似问题