——————摘自C++沉思录
(注:其中加了一些个人的注释)
1.你的类需要构造函数吗?
2.你的数据成员是私有的吗?
3.你的类需要一个无参构造函数吗?如果使用了自定义的构造函数,那么编译器不会默认生成构造函数,这时候如果需要调用无参构造函数,则必须我们自己显示地写一个。如果为了阻止无参数实例化,还需要考虑数组的问题。
4.是不是每个构造函数初始化所有的数据成员?
5.类需要析构函数吗? 三五法则
6.类需要一个虚析构函数吗? 只要有人可能对指向子类的对象父类指针调用delete表达式,父类就需要一个虚析构函数。
7.你的类需要复制构造函数吗?
关键在于复制该类对象是否相当于复制其数据成员和基类对象。如果并不相当,就需要复制构造函数。
需要析构函数的类往往也需要拷贝和赋值操作。
需要拷贝操作的类也需要赋值操作,反之亦然。
如果不希望用户复制类的对象,就声明复制构造函数(赋值运算符)为私有的。
8.你的类需要一个赋值操作符吗?
如果需要复制构造函数,往往也还会需要赋值操作符
9.你的赋值操作符能够正确地将对象赋给对象本身吗?
自复制问题 ————先释放旧值,再复制
10.记得在复制构造函数和赋值操作符的参数类型上加 const 了吗?(X::X(const X&) )
11.你的类需要定义关系操作符吗?
将类的对象放在容器使用中可能涉及到 == 或 != 以及比较大小等问题。
12.删除数组时 你记住用delete[] 吗?
13.如果函数有引用参数,它们应该是const引用吗?
只有当函数想改变参数时,参数才是非const的。
14.记得适当声明成员函数为const的吗?
只有将成员函数声明为const的,才能把它用于const对象。