您的位置:首页 > 编程语言 > C语言/C++

More Effective C++(2)

2015-06-09 23:44 344 查看
class Base{
public:
Base(object* pValue){
try{
//TODO

}
catch(exception){
m_pValue.release();
}
}
~Base();

private:   shared_ptr<object> m_pValue;

};


在ctor中抛异常的时候例如

</pre><span style="font-size:18px"></span><p></p><p><span style="font-size:18px"> 这里使用了ctor中的exception</span></p><p><span style="font-size:18px"></span></p><p><span style="font-size:18px"> 这里值得注意是在ctor中如果抛出异常话,那么就不会调用dctor,那么就需要在异常里面直接对所建的对象进行析构,  这里不该称之为是对象因为一个完整的对象没有构建完,所以只能算是半个对象,那么析构掉它;</span></p><p><span style="font-size:18px"></span></p><p><span style="font-size:18px"></span></p><p><span style="font-size:18px">  如果在dctor中使用exception的话例子如下</span></p><p><span style="font-size:18px"></span></p><pre name="code" class="cpp"><pre name="code" class="cpp">template<typename M>

class Base{

public:Base(){};
~Base(){
try{
logCreateBase()}
catch()
{
}
}
void logCreateBase();

private: shared_ptr<M> p_mVlaue;
};




其实这里的代码段在析构的时候保证了无忧;

如果logCreateBase代码段出现了exception那么就会在这里捕获异常,但是如果你在这里没有做exception的话,那么就会出现内存泄露,因为你的dctor没有完全执行完,所以你的对象没有完全析构掉,必然出现内存泄露;

现在看来看More Effective 真是本好书,,,,

但是里面有一节,中还在使用auto_ptr我感觉这个smart_pointer一般还是不要在single thread 中一般使用shared_ptr或者使用scoped_ptr这个指针不错,尽量减少auto_ptr的使用是明智的、
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: