Effective STL 条款7

来源:互联网 发布:淘宝店贷款条件 编辑:程序博客网 时间:2024/05/16 09:36

使用容器的时候 ,要避免内存泄露

众所周知,使用容器的好处是我们不用考虑容器的内存问题,容器本身具有自动内存管理的能力,包括动态申请内存和释放内存。

但是,当你存储的对象是指针的时候,你就要注意内存的人工释放了。
如下代码:

void doSomething(){    vector<Widget*>vwp;    for(int i=0;i<num;i++)    {       vwp.push_back( new Widget);    }    ....}

当退出doSomething函数的时候,vwp对象的内存删除了,但是,vwp对象中每个元素都是Widget指针,对应的Widget指针指向的内存却没有被回收。这种状态就导致了内存泄露。

如何解决呢?最直接的办法就是人工删除。
如下代码:

void doSomething(){    vector<Widget*>vwp;    for(int i=0;i<num;i++)    {       vwp.push_back( new Widget);    }    ....    for(vector<Widget*>::iterator i = vwp.begin();i!=vwp.end();++i)    {        delete *i;    }}

上面的代码就避免了内存的泄露

Effective STL的作者是一个追求完美的人,他认为这种写法不高大上,所以,他就创建了一个结构体来实现内存泄露。

抽时间再贴代码

1 0