【问题标题】:How to deallocate an element in a vector of pointers?如何释放指针向量中的元素?
【发布时间】:2013-05-08 16:49:45
【问题描述】:

所以我有一个这样的指针向量:

vector<Example*> ve;

我用这样的指针填充这个向量

Example* e = new Example();
ve.push_back(e)

但是当我想删除它们时,我如何确保它们被释放? 够了吗?

ve.erase(ve.begin() + 1)
delete ve[1]

【问题讨论】:

  • 要考虑的一件事:你需要指针吗?如果对象是不同的(多态的)类型,你会这样做;或者如果它们无法移动或移动成本过高;或者如果向量不“拥有”它们(它在这里这样做,因为您想在移除时释放它们)。否则,请考虑使用vector&lt;Example&gt;

标签: c++ pointers vector memory-management


【解决方案1】:

当然,你必须反过来做:

delete ve[1];
ve.erase(ve.begin() + 1);

但是,在表达所有权时,最好使用智能指针(例如std::unique_ptr)而不是原始指针。

【讨论】:

    【解决方案2】:

    您必须在 擦除矢量之前删除指针:

    for (vector<Example *>::iterator it = vec.begin(); it != vec.end(); it++) {
        delete *it;
    }
    
    vec.clear();
    

    【讨论】:

    • 使用vec.clear() 而不是vec.erase(vec.begin(), vec.end())
    • @MikeDeSimone 很公平,已修复。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-12
    • 1970-01-01
    • 1970-01-01
    • 2019-05-15
    • 1970-01-01
    相关资源
    最近更新 更多