1

我的程序中出现了一点内存泄漏,这是我认为唯一可能发生的事情。

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();
}

添加了清理代码。

编辑:已解决

我的问题与向量的关系不如类的析构函数那么大。由于我没有定义虚拟析构函数,因此只删除了基类,留下了派生类的片段。添加后没有内存泄漏。

4

4 回答 4

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 应该使用 astd::unique_ptr并将其存储在std::vector或考虑使用boost::ptr_vector为存储指针而设计的。

于 2012-09-21T08:13:25.743 回答
3

在向量上使用std::vectorofstd::unique_ptr<SavingAccount>或循环,在向量超出范围或被删除之前删除所有元素。

于 2012-09-21T08:12:17.343 回答
2

您可以在销毁向量之前删除或将智能指针存储在向量中。

于 2012-09-21T08:11:19.210 回答
2

在销毁向量之前删除SavingAccount*存储在向量中的 。

如果可以的话,或者使用智能指针。

于 2012-09-21T08:11:51.827 回答