几乎你写的每一个class都会有一个或多个构造函数、一个析构函数、一个copy assignment操作符。
条款05:了解C++默默编写并调用哪些函数
#编译吕可以暗自为class创建default构造函数、copy构造函数、copy assignment操作符,以及析构函数
class Empty { };
这就好像你写下这样的代码:
class Empty {
public:
Empty() { ... } //default构造函数
Empty(const Empty& rhs) { .. } //copy构造函数
~Empty() { ... } //析构函数,是否该是 是个non-virtual
//virtual见稍后说明
Empty& operator=(const Empty& rhs) { ... } //copy assignment操作符
};
条款06:若不想使用编译器自动生成的函数,就该明确拒绝
条款07:为多态基类声明virtual析构函数
虚函数的目的是允许derived class的实现得以客制化
class TimeKeeper {
public:
TimeKeeper();
~TimeKeeper();
...
};
class AtomicClock: public TimeKeeper { ... };
class WaterClock: public TimeKeeper { ... };
class WristWatch: public TimeKeeper { ... };
条款08:别让异常逃离析构函数
条款09:绝不在构造和析构过程中调用virtual函数
条款10:令operator=返回一个reference to *this
为了实现“连锁赋值“ x = y = z
class Widget {
public:
Widget& operator+=(const Widget* rhs) {
return *this;
}
};
条款11:在operator=中处理“自我赋值“
条款12:复制对象时勿忘其每一个成分