C++ 存储指针的容器删除元素

标签: C++ memory vector
45人阅读 评论(0) 收藏 举报
分类:

假设需要用vector等容器存储指针,形如vector<typename *>,在删除元素的时候,仅仅使用erase改变了容器的存储,却没有释放指针所指向的内存,一不小心就造成了内存溢出。
故,我们需要在erase的同时释放内存。

template<typename T>
void deleteObject(T *obj){
    delete obj;
    obj = NULL;
}

class Base{
    static int count;
public:
    Base() { count++; cout<<"Base(): "<<count<<endl; }
    ~Base() { cout<<"~Base(): "<<count<<endl; count--; }
};

int Base::count = 0;

int main(){
    vector<Base*> elements;
    elements.push_back(new Base());
    elements.push_back(new Base());
    elements.push_back(new Base());

    while(!elements.empty()){
        vector<Base*>::iterator it = elements.end();
        elements.erase(--it);  // not call destruction function.
        deleteObject(*it);    // call destruction function.
    }
    return 0;
}
/*
Base(): 1
Base(): 2
Base(): 3
~Base(): 3
~Base(): 2
~Base(): 1
*/
查看评论

Ineffective C++(1):STL容器不仅仅可以保存指针

前言        在公司这两年没少带新人,有刚毕业的,也有工作了两三年的。除了要把公司项目的一些知识告诉他们,通常了需要review一下他们的代码。发现很多人在C++的基本概念上存在错误或者偏差,或...
  • yanonsoftware
  • yanonsoftware
  • 2006-09-19 17:59:00
  • 2578

C++ 容器中存入”指针“及对象析构问题

[转]C++ 容器中存入”指针“及对象析构问题  (2012-09-20 23:32:20) 转载▼ 标签:  杂谈 分类: C相关 ...
  • jfkidear
  • jfkidear
  • 2014-02-18 11:28:00
  • 7778

C++ STL常用容器删除操作注意事項

C/C++程序员对STL 容器肯定不会陌生, 以下是对常用容器进行 erase 操作注意事项的总结:vectorvector 容器是用数组实现的, 它在内存是连续分布的.对它进行 insert 或 ...
  • u010090316
  • u010090316
  • 2017-04-19 20:24:37
  • 611

Effective STL 第7条:如果容器中包含了通过new操作创建的指针,切记在容器对象析构前将指针delete掉

STL中的容器相当“聪明”,它们提供了迭代器,以便进行向后和向前的遍历(通过begin、end、rbegin等);它们告诉你所包含的元素类型(通过它们的value_type类型定义);在插入和删除的过...
  • u012432778
  • u012432778
  • 2014-12-21 22:31:47
  • 863

智能指针容器及STL容器

指针元素的容器:容器以指针为元素,存放的是一些内存地址,而不是真正的数据,这种容器只负责指针元素本身的内存动态分配和释放,而不会负责指针元素指向对象的内存管理任务。 作为STL容器元素需要满足的条件...
  • jzhb1987
  • jzhb1987
  • 2013-09-18 14:59:27
  • 904

C++类中静态STL容器中的指针所指向的动态内存空间如何释放!

博主在写C++程序时遇到了要在类中写一个静态list链表去存储一个类对象指针,这个指针指向动态申请的类对象内存空间,由于这个类不需要创建类对象所以不会调用析构函数,也就不会去释放list中的指针所指向...
  • weixin_38884871
  • weixin_38884871
  • 2017-08-26 11:54:02
  • 100

c++ STL 常用容器元素类型相关限制 指针 引用

转自: http://www.cnblogs.com/my_life/articles/4044921.html c++ 的 STL 中主要有 vector , list, map, set  ...
  • Helloguoke
  • Helloguoke
  • 2016-09-22 16:58:01
  • 1218

C++ STL容器遍历删除元素的方法

C++ STL容器遍历删除元素的方法  上周在做内存池回收的时候,遍历deque(使用了双端队列来管理内存块)的每一个元素,查找满足条件的内存块并进行回收,结果竟然coredump了。   写了个简...
  • tinywolfcgl
  • tinywolfcgl
  • 2016-12-05 11:49:42
  • 434

c++ vector中存放指针

#include #include #include #include using namespace std; int main() { vector* > *ve = new vecto...
  • u010442009
  • u010442009
  • 2014-11-12 18:12:51
  • 3044

STL容器中 存放指针与对象区别 遍历删除与释放操作

c++中我相信大家经常要用到STL里面的各种容器来存放自己的数据,既然我们用的这么频繁那么就相应该有一些疑问?...
  • AC_huang
  • AC_huang
  • 2014-06-08 18:44:05
  • 3740
    个人资料
    持之以恒
    等级:
    访问量: 37万+
    积分: 9442
    排名: 2418
    我的链接
    最新评论