条款5、了解C++默默编写并且调用哪些函数
1)编译器可以暗自为class创建default构造函数、copy构造函数、copy assignment操作符、以及析构函数
2)当Class中含有non-static const 成员变量 和 non-static reference成员变量时,编译器将拒绝赋值动作
3)当Base class 将copy assignment声明为private时,编译器将拒绝为derived class生产copy assignment操作符
条款6、若不想使用编译器自动生成的函数,就该明确拒绝
1)为了驳回编译器自动提供的机能,可将相应的成员函数声明为private并且不予实现。使用像Uncopyable的base class也是一种做法
class Uncopyable
{
protected:
Uncopyable();
~Uncopyable();
private:
Uncopyable(const Uncopyable&);
Uncopyable& operator =(const Uncopyable&);
};
class derived :private Uncopyable
{
};
条款7、为多态基类声明为virtual析构函数
1)polymorphic(带有多态性质的)base classes应该声明一个virtual析构函数。如果class 带有任何的virtual函数,它就应该拥有一个virtual析构函数
2)Class的设计的目的如果不是作为base classese 使用,或者不是为了具备多态的,就不该声明virtual函数
条款8、别让异常跳离析构函数
1)析构函数绝对不要吐出异常。如果一个被析构函数调用的函数可能抛出异常,析构函数应该捕捉任何一次,然后吞下它们或结束程序。
2)如果客户需要对某个操作函数运行奇迹抛出异常做出反应,那么class应该提供一个普通函数(而非在析构函数中)执行该操作。
条款9、绝不在构造和析构过程中调用virtual函数
1)在构造和析构期间不要调用virtual函数,因为这类调用从不下降至derived class。
条款10、令operator= 返回一个reference to *this