Effective C++
1 把C++当作一个语言联邦,守则按照你使用c++的那部分而定:
1.C,Object-oriented C++,Template C++,STL
2. 尽量以const,enum,inline 替换#define
1.单纯变量最好以const对象或者enum替换#define;
2.对于形似函数的宏(macros),inline替换#define;
3.尽可能使用const
1.使用const可以帮助编译器找出错误用法,const可以施加于任何作用域内的对象;
2.编译器强制实施bitwise constness,但你应该使用“概念上的常量性“;
3.当const和non-const成员函数有着实质上的等价的时候,令non-const版本调用const版本,可以避免重复,使用const_cast移除const限制符.
4.确定对象在被使用前就被初始化
1.为内置对象进行手动初始化,因为C++不保证初始化他们;
2.构造函数最好使用成员初始化列表,而不要在构造函数中使用赋值操作。初始化列列出的成员变量,其排列次序应该和它们在类中的排列次序一样;
3.为避免“跨编译单元之初始化序列”问题,以local static对象代替non-local static对象.
5了解c++默默编写并调用了哪些函数
编译器可以暗自为class创建defalut构造函数,copy构造函数,copy assignment操作符以及析构函数
6.若是不想使用编译器自动生成的函数,就该拒绝
不想让编译器自动提供函数,可将相应的成员函数声明为private并且不予实现。
7. 为多态类型基类声明virtual析构函数
多态基类应该声明一个virtual函数。如果class带有任何virtual函数,它就应该有一个virtual析构函数
如果class不是作为基类,或不具有多态性质,那么就不应该声明virtual析构函数
8.别让异常逃离析构函数
9.绝不在析构函数和构造函数中调用virtual函数
10令operator= 返回一个reference to *this
11在operator= 中处理“自我赋值“
12复制对象时勿忘其每一个成分
13使用对象管理资源
14在资源管理类中小心copy函数
15在资源管理类中提供对原始资源的访问:
16成对使用new和delete时要采取相同的形式:
如果在new中使用[],则必须在对应的delete使用[],如果在new中没有使用[],则一定不要在delete中使用[]
17以独立语句将newed对象置入智能指针
18 让接口容易被使用而不易被误用
19 设计class犹如设计type
20 尽量以pass by reference const 代替pass by value
对于内置类型以及STL的迭代器和函数对象不适用