Effective C++笔记(二)
2015-10-29 17:20
211 查看
条款9:避免隐藏标准形式的new
在类里声明了一个带多个参数的operator new函数后,就无法以标准形式调用operator new,因为全局的operator new函数被成员函数遮蔽了。
条款10:如果写了operator new就要同时operator delete
这两个函数是成对使用的,它们之间要遵循一些共同的约定,如果重写了其中一个而不重写另一个,它们之间就难以保证共同遵循某些规定。
条款11:为需要动态分配内存的类声明一个拷贝构造函数和一个赋值操作符
需要动态分配内存的类通常不应该使用编译器根据按位复制语义自动生成的默认拷贝构造函数和赋值操作符,需要用户自定义。
条款12:尽量使用初始化而不要在构造函数里赋值
初始化和赋值的语义是不同的
条款13:初始化列表中成员列出的顺序和它们在类中声明的顺序相同
这样可以避免混淆成员的初始化顺序。
条款14:确定基类有虚析构函数
否则,通过基类指针指向派生类对象实现多态,最后删除对象时,将无法调用正确的析构函数。
条款15:让operator = 返回*this的引用
否则就无法连续赋值或导致调用时的隐式类型转换不能进行。
条款16:在operator =中对所有数据成员赋值
增加数据成员或使用继承时,别漏掉对某个成员的赋值。
条款17:在operator =中检查给自己赋值的情况
operator =和初始化操作不同,一般会先清理先前的资源,若不检查给自己赋值的情况,就会先清理掉自己的资源,此时,赋值号两边的对象其资源都被清理了。
在类里声明了一个带多个参数的operator new函数后,就无法以标准形式调用operator new,因为全局的operator new函数被成员函数遮蔽了。
条款10:如果写了operator new就要同时operator delete
这两个函数是成对使用的,它们之间要遵循一些共同的约定,如果重写了其中一个而不重写另一个,它们之间就难以保证共同遵循某些规定。
条款11:为需要动态分配内存的类声明一个拷贝构造函数和一个赋值操作符
需要动态分配内存的类通常不应该使用编译器根据按位复制语义自动生成的默认拷贝构造函数和赋值操作符,需要用户自定义。
条款12:尽量使用初始化而不要在构造函数里赋值
初始化和赋值的语义是不同的
条款13:初始化列表中成员列出的顺序和它们在类中声明的顺序相同
这样可以避免混淆成员的初始化顺序。
条款14:确定基类有虚析构函数
否则,通过基类指针指向派生类对象实现多态,最后删除对象时,将无法调用正确的析构函数。
条款15:让operator = 返回*this的引用
否则就无法连续赋值或导致调用时的隐式类型转换不能进行。
条款16:在operator =中对所有数据成员赋值
增加数据成员或使用继承时,别漏掉对某个成员的赋值。
条款17:在operator =中检查给自己赋值的情况
operator =和初始化操作不同,一般会先清理先前的资源,若不检查给自己赋值的情况,就会先清理掉自己的资源,此时,赋值号两边的对象其资源都被清理了。