c++ - 指针 vector 中的内存泄漏,如何防止?

标签 c++ memory pointers vector memory-leaks

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

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/

相关文章:

c - 为什么 free() 需要动态数组的起始指针?

c++ - svn重命名问题

c++ - 为什么 chrono::nanoseconds 的表示类型是有符号整数类型?

c++ - const/非常量对象指针的 union

java - 如何检测java程序中的内存压力?

c++ - 具有 const 参数的模板未按预期分派(dispatch)

c - 指针如何提高程序效率?

c++ - libpng 中的内存泄漏?还是我只是愚蠢?

Go:内存问题

memory - 我可以在 Atmel SAM E70 处理器中使用 "Instruction"TCM 来获取数据吗?