我的程序中出现了一些内存泄漏问题,这是我认为唯一的问题。
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();
}
清理添加的代码。
编辑:已解决
我的问题与向量没有那么多,因为它做了类的析构函数。因为我没有定义虚拟析构函数,所以只删除了基类,留下派生类的片段。添加此内容后没有内存泄漏。
答案 0 :(得分:7)
为什么你的向量中需要指针?我没有看到你的很多代码,但如果你的SavingAccount
类是可复制的,那么下面的AFAIK也可以正常工作:
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
。
答案 1 :(得分:3)
使用std::vector
std::unique_ptr<SavingAccount>
或循环遍历向量,在向量超出范围或删除之前删除所有元素。
答案 2 :(得分:2)
您可以在销毁向量之前删除,也可以在向量中存储智能指针。
答案 3 :(得分:2)
在摧毁矢量之前,删除存储在矢量中的SavingAccount*
。
或者使用智能指针,如果可以的话。