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的使用是明智的、
相关文章推荐
- 欢迎一起讨论C++ MFC编程。。。
- 怎么避免在类实现的cpp文件中不要多次进行类声明
- 怎么避免在类实现的cpp文件中不要多次进行类声明
- C++|C++学习笔记|数据、变量和计算
- 列举C++数据库开源工具
- c语言指针笔记
- C++的隐式类型转换
- C++——i++与++i
- 把学习当成项目来执行之初试牛刀--Modern C++ Design学习
- C++ 中的类型转换函数
- 【Text Justification】cpp
- C++中如何避免内存泄露
- 对C++中顺序容器的插入迭代器的认识
- c语言中scanf等函数关于输入流缓冲区
- C++ bool值
- C语言基础练习:在Xcode中练习的for循环语句
- C++继承时派生类与基类有同名函数时如何分别引用
- zerglurker的C语言教程004——指针初步讲解
- Java基础 Java与C++的几点细节不同
- ###《More Effective C++》- 操作符