首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >指针向量中的内存泄漏,如何预防?

指针向量中的内存泄漏,如何预防?
EN

Stack Overflow用户
提问于 2012-09-21 16:08:38
回答 4查看 3.6K关注 0票数 1

我在我的程序中遇到了一点内存泄漏,这是我认为唯一可能的事情。

代码语言:javascript
代码运行次数:0
运行
复制
if (inputType == 'S')
{
    SavingAccount* savingAccount = new SavingAccount();
    inFile >> *savingAccount;

    accounts.push_back(savingAccount);
}

虽然指针的向量在程序结束时被删除,但我有3个错误泄漏,这似乎与我拥有的3种类型的帐户相对应。也就是说,如果我在将指针放入向量后删除它,它也会删除向量中的条目(这是我所期望的)

有人知道如何解决这个问题吗?

编辑:

代码语言:javascript
代码运行次数:0
运行
复制
void Transaction::cleanUp()
{
    for (int i = 0; i < accounts.size(); i++)
    {
        delete accounts[i];
    }

    accounts.clear();
}

清理添加的代码。

编辑:已解决

我的问题并不像类的析构函数那样与向量有太多关系。因为我没有定义虚拟析构函数,所以只有基类被擦除,留下了派生类的片段。添加这个后不会出现内存泄漏。

EN

回答 4

Stack Overflow用户

发布于 2012-09-21 16:13:26

为什么向量中需要指针?我没怎么看过你的代码,但如果你的SavingAccount类是可复制构造的,下面的代码也可以很好地工作:

代码语言:javascript
代码运行次数:0
运行
复制
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,它是为存储指针而设计的。

票数 7
EN

Stack Overflow用户

发布于 2012-09-21 16:12:17

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

票数 3
EN

Stack Overflow用户

发布于 2012-09-21 16:11:19

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12526597

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档