1.尽量以const,enum,inline替换#define:编译器取代预编译器,错误追溯。
2.为多态基类声明virtual析构函数:通过基类指针可以析构继承类对象。
3.别让异常逃离析构函数:C++的异常实现机制一般都是不允许多重异常的,如果析构函数吐出异常,那么会出现资源泄露等不确定性行为或程序中止。异常发生时往往要回退并析构对象,那么从这点看析构函数也是不允许抛出异常的(不允许嵌套异常)。
4.绝不在构造析构函数中调用virtual函数:考虑访问未初始化对象这些安全性问题,这里面的virtual函数被当做non-virtual处理。所以调用virtual函数违背了使用virtual的初衷。
5.以对象管理资源:利用C++的析构函数自动调用机制来自动释放资源。
6.确定你的public继承塑模出is-a关系:这种关系可能和现实中不尽相同,如矩形和正方形的is-a关系,并不是所有作用于矩形的操作都可以作用于正方形;企鹅与鸟的关系,关键理清楚有些鸟也是不会飞的。
7.绝不重新定义继承而来的non-virtual函数:这违背了继承的初衷。如果需要多态的实现就干脆写成虚函数,或用复合。
8.通过复合塑模出has-a或“根据某物实现出”:复合和public继承的关系完全不同,如可以通过list实现出set(复合,即set包含list成员),不应通过set:public list来实现set,因为list可以插入重复元素,而set则不行。