use*_*990 1 c++ memory pointers memory-leaks vector
我的程序中出现了一些内存泄漏问题,这是我认为唯一的问题.
if (inputType == 'S')
{
SavingAccount* savingAccount = new SavingAccount();
inFile >> *savingAccount;
accounts.push_back(savingAccount);
}
Run Code Online (Sandbox Code Playgroud)
虽然在程序结束时删除了指针向量,但我有3个错误泄漏,这似乎与我拥有的3种类型的帐户相对应.话虽这么说,如果我把它放入向量后删除指针,它也会删除向量中的条目(我预期)
有谁知道如何解决这个问题?
编辑:
void Transaction::cleanUp()
{
for (int i = 0; i < accounts.size(); i++)
{
delete accounts[i];
}
accounts.clear();
}
Run Code Online (Sandbox Code Playgroud)
清理代码添加.
编辑:已解决
我的问题与向量没有那么多,因为它做了类的析构函数.因为我没有定义虚拟析构函数,所以只删除了基类,留下派生类的片段.添加此内容后没有内存泄漏.
为什么你的向量中需要指针?我没有看到你的很多代码,但如果你的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.
}
Run Code Online (Sandbox Code Playgroud)
编辑
看到OP说他有一个多态的类结构,那么OP应该使用a std::unique_ptr
并将其存储在std::vector
或考虑使用boost::ptr_vector
哪个用于存储指针.