我的程序中出现了一点内存泄漏,这是我认为唯一可能的情况。
if (inputType == 'S')
{
SavingAccount* savingAccount = new SavingAccount();
inFile >> *savingAccount;
accounts.push_back(savingAccount);
}
虽然指针 vector 在程序末尾被删除,但我有 3 个错误泄漏,这似乎与我拥有的 3 种类型的帐户相对应。话虽这么说,如果我在将指针放入 vector 后删除它,它也会删除 vector 中的条目(这是我预期的)
有人知道怎么解决吗?
编辑:
void Transaction::cleanUp()
{
for (int i = 0; i < accounts.size(); i++)
{
delete accounts[i];
}
accounts.clear();
}
清理添加的代码。
编辑:已解决
我的问题与 vector 的关系不如与类的析构函数有关。因为我没有定义虚拟析构函数,所以只有基类被删除,留下派生类的片段。添加这个后就没有内存泄漏了。
最佳答案
为什么你的 vector 中需要指针?我没有看到太多你的代码,但据我所知,如果你的 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
用于存储指针。
关于c++ - 指针 vector 中的内存泄漏,如何防止?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12526597/