1、 对于一个类的构造函数,其非静态成员初始化列表中成员列出的顺序和它们在类中声明的顺序相同。其原因可以这样可虑:对一个对象的所有成员来说,它们的析构函数被调用的顺序总是和它们在构造函数里被创建的顺序相反。为了避免保存某个类对象构造函数调用顺序而导致过多的开销(因为该类的各个构造函数可能又不同的成员初始化表的顺序),最好的办法是对同一种类型的所有对象在创建(构造)和摧毁(析构)过程中对成员的处理顺序都是相同的(采用类中成员声明的顺序),而不管成员在初始化列表中的顺序如何。再从可读性方面考虑,成员初始化列表中成员列出的顺序应该和它们在类中声明的顺序相同。
2、 当某个类要作为基类时,其析构函数一定要声明为虚拟的。其原因可以这样考虑,该类作为基类,则常常要使用指向该基类的指针去操作派生类对象,很明显,该派生类对象销毁时,通过基类指针找不到派生类的析构函数。同样,如果某个类不作为基类时,将其析构函数声明为虚拟的也一样是错误的,因为实现虚函数需要类对象附带一些额外信息(指向该类虚函数表的指针),以使对象在运行时可以确定该调用哪个虚函数,而该额外信息将使得所有该类对象占据更多的内存。在继承机制下,派生类的析构函数先被调用,然后再自动的静态调用其直接基类的析构函数(所以基类析构函数不应该是纯虚函数,但可以在声明中=0表示为虚基类之后再给出一个空的函数定义),注意由于虚拟函数承接了“调用者所属类类型的访问级别”,所以应该把基类的析构函数声明为虚拟的放在public区。