第7条: 要将多态基类的析构函数声明为虚函数
l 有一些类是设计用作基类的,但是它们并未被设计成多态类,如uncopyable类[1]。
第8条: 防止因异常而中止析构函数
l 永远不要让析构函数引发异常。如果析构函数所调用的函数会抛出异常的话,那么析构函数中要捕捉到所有异常,然后忽略它们或者终止程序。[2]
l 在一次操作中,如果一个类的使用者有能力对抛出异常作出反应,那么这个类应该提供一个常规的函数(而不是析构函数)来进行这一操作。
l 如果析构函数中确实出现异常,那么应该重新设计接口。将异常不安全代码抽出来成为普通成员函数,始终保证如果想析构,就应该是安全的析构。
第9条: 永远 不要在构造或析构的过程中调用虚函数,因为这样的调用永远不会转向当前执行的析构函数或构造函数更深层的派生类中执行。
第10条: 让赋值运算符返回一个指向 *this 的 引用。重载运算符要遵循惯例。
第11条: 在 operator= 中要考虑到 自赋值问题。if (&other_obj == this)return *this;
第12条: 要复制整个对象,不要遗漏任一部分。特别是不要忘记基类。