1.构造函数不能是虚函数?
原因:虚函数的执行依赖于虚函数表,而虚函数表在构造函数中进行初始化工作,即初始化vptr,让它指向正确的虚函数表。而在构造对象期间,虚函数表还没有被初始化,就无法执行。
2.实现多态时,基类的析构函数必须是虚析构函数?
原因:假设基类中采用的是非虚析构函数,但删除基类指针指向的派生类对象时就不会触发动态绑定,因而只会调用基类的析构函数,而不会调用派生类的析构函数。所以,派生类中申请的空间就得不到释放,从而产生内存泄露。
1.构造函数不能是虚函数?
原因:虚函数的执行依赖于虚函数表,而虚函数表在构造函数中进行初始化工作,即初始化vptr,让它指向正确的虚函数表。而在构造对象期间,虚函数表还没有被初始化,就无法执行。
2.实现多态时,基类的析构函数必须是虚析构函数?
原因:假设基类中采用的是非虚析构函数,但删除基类指针指向的派生类对象时就不会触发动态绑定,因而只会调用基类的析构函数,而不会调用派生类的析构函数。所以,派生类中申请的空间就得不到释放,从而产生内存泄露。