Item 1
c++其实是个大杂烩。
Item 2
使用const,enums,inlines等,容易定位错误。宏有很多坏处,比如著名的max函数宏定义问题。
Item 3
多使用const,保证正确性等等。比如返回类型、const的函数等。还有const非const的转换问题。
Item 4
进行初始化。使用初始化列表,注意初始化和赋值,是不同的东西。还有传说的local static object,以及使用函数调用的方式来保证static的对象,可以在调用前进行初始化。
Item 5
会自动生成这四个函数,如果用户没有自行定义:构造,析构,拷贝构造,=。但是存在问题时,编译器不会自动构建=。
Item 6
显示不允许自动生成上述的函数,可以通过只declare不define。并且,设置为private,不让人们调用。更加好的方法,是使用Uncopyable基类的方式。
Item 7
在基类中,需要将析构函数定义为virtual的形式,这样子,当进行delete一个基类的指针时,可以通过虚表来执行实际的派生类析构函数。虚表,虚表指针等内容。还有虚函数增加内存的内容。
Item 8
在析构时,需要防止促发exception。主旨是,要能重现这个exception,方便进一步处理。
Item 9
在构造、析构函数中,不要调用虚函数,因为调用的版本可能会不对。构造、析构的过程。
Item 10
operators应该返回*this。与build-in类型一致。
Item 11
assignment to self。self-assignment safe,还有exception safe的方式。以及使用拷贝构造函数,swap函数等。
Item 12
要拷贝object的所有部分。在拷贝构造函数,=赋值号中,注意。
Item 13
使用对象去管理资源。RAII,Resource Acquisition Is Initialization,资源获取就是初始化。还有RCSP,Reference-Counting Smart Pointer。
Item 14
进行资源管理的类的拷贝时。
Item 15
提供raw source的访问方法。有两种,explicit(get函数),implicit(operator形式)。注意会有的问题。
Item 16
new delete时,数组问题,记得 [ ]
Item 17
使用智能指针时候,使用standalone statements,否则会有泄露的危险,因为C++对函数参数的实现顺序没有强制要求。
========TO BE CONTINUED======