本文主要是介绍Effective STL 条款7,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
使用容器的时候 ,要避免内存泄露
众所周知,使用容器的好处是我们不用考虑容器的内存问题,容器本身具有自动内存管理的能力,包括动态申请内存和释放内存。
但是,当你存储的对象是指针的时候,你就要注意内存的人工释放了。
如下代码:
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的作者是一个追求完美的人,他认为这种写法不高大上,所以,他就创建了一个结构体来实现内存泄露。
抽时间再贴代码
这篇关于Effective STL 条款7的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!