下面的代码会导致资源泄漏:
void doSomething()
{
vector<Widget*> vwp;
for (int i=0; i<NUMBER; i++) {
vwp.push_back(new Widget);
}
...
} //Widget泄漏
你希望它们被删除:
void doSomething()
{
...
for (vector<Widget*>::iterator i = vwp.begin(); i!=vwp.end(); i++) {
delete *i;
}
}
正常情况下是能删除的,但是这段代码不是异常安全的,如果中间过程有异常抛出,同样会资源泄漏。
最简单的解决方式是用智能指针容器代替指针容器:
void doSomething
{
typedef boost::shared_ptr<Widget> spw; //指向Widget的shared_ptr
vector<spw> vwp;
for (int i=0; i<NUMBER; i++) {
vwp.push_back(spw(new Widget));
}
...
} // 不会资源泄漏