关于初始化列表,它在构造函数的函数体之前执行。
关于继承,子类的构造函数在自身函数体执行之前调用父类的构造函数,子类的析构函数会在自身的函数体执行之后调用父类的析构函数。
关
于多态,有虚函数的类的对象中会在最前面多出4个字节来作为虚表指针,父类的构造函数会设置对象的虚表指针指向父类的虚函数表,然后这个类的构造函数会重
新设置对象的虚表指针指向这个类的虚函数表,这个类的析构函数会再次设置对象的虚表指针指向这个类的虚函数表,最后调用父类的析构函数又会重新设置对象的
虚表指针指向父类的虚函数表,所以在构造和析构函数中即使调用虚函数也不会有多态发生。但是构造完毕之后析构之前,调用虚函数则会通过对象的虚表指针找到
虚函数表来调用,多态可以正常工作。
关于new/delete,new是先分配空间再调用构造函数,delete会先调用析构函数再释放空间。如果是虚析构,看下一条。
关于虚析构,实际上析构不是虚函数,用一个虚函数scalar_deleting_destructor来替代,它会先调用析构函数,然后根据传入的参数是否(最低位)是1来决定是否用delete释放空间。
posted on 2010-08-06 12:58
何克勤 阅读(252)
评论(0) 编辑 收藏 所属分类:
C/C++