virtual ~CTest();
private: DISALLOW_COPY_AND_ASSIGN(CTest); }; 析构函数 若类定义的虚函数,必须指定虚析构函数若类定义为可被继承的,应该定义公开的虚析构函数或者保护的析构函数不能让异常离开析构函数析构函数只应该销毁对象,不应该执行会抛出异常的复杂操作,避免执行可能失败的操作class Connection { public:
void close(); // " " " -> " ~Connection() {
if (_connection_state == CONNECTED) { close(); //
} }
};
继承的使用 继承必须表示is a 的关系,而不是为了复用方法子类方法不能覆盖父类的非虚方法尽量使用公有继承尽量避免使用公有继承,只能有一个是基类继承,其他尽量是接口继承访问控制类不能定义public非静态数据成员,也不能定义protected数据成员类可以定义public静态数据成员,但必须是const的,否则应该通过静态的setter和getter访问只有组合类是接口的一部分的时候才能是public的 权限申明 数据成员应该按照public,protected和private的顺序申明 友元 除了容器的迭代器,运算符重载等,尽量避免使用友元 错误码 错误码返回int的时候,非负值表示成功,负值表示失败任何调用有错误码的函数都必须有错误码检查命名空间任何有效代码都需要被namespace封装起来源文件尽量少使用using(怕与头文件的定义冲突),尽量使用using class内联函数在类申明中定义的函数会自动内联 函数/方法重载 重载函数的参数顺序需要谨慎考虑需要避免整数类型和指针之间的重载,因为NULL只是定义为0的一个宏,当传入NULL的时候会引起错误调用禁止使用默认参数,因为这是编译期绑定的, 在不考虑返回值的前提下,尽量使用前置自增运算符,可以避免不必要的拷贝 条件表达式 不要在条件表达式中新建变量 sizeof关键字 尽可能用sizeof(关键字)而不是sizeof(类型名) typedef关键字 typedef尽量在类中申明,防止滥用 宏定义 尽量少使用宏定义不要用宏依赖静态变量不要使用宏作为左值使用枚举或者const代替宏做常量定义 静态/全局/变量和函数 尽量少使用全局变量,而是用singleton代替全局变量之间不要有依赖关系内部使用的全局函数和变量必须申明为静态的全局静态变量只在类中生效,其余文件需要引用需要加入extern 常量定义 define尽量用const和enum替代尽量少在头文件中定义类和结构体类型的全局常量枚举值尽量显式定义 const定义 不修改内部状态的成员方法必须申明为const返回不可修改的指针或者引用需要申明为const不被修改的指针/引用需要申明为const