构造函数调用虚函数的问题
2016-09-25 22:41
302 查看
一般情况下,不允许在构造函数或者析构函数中调用虚函数。其实语法上都没有问题,只是会失去多态性。
如果在构造函数中调用虚函数,会先调用父类中的实现,也就失去了多态的性质。
如果在析构函数中调用虚函数,也是同样的失去了多态性。
出现上述结果的原因是因为,构造函数还没有将vptr和vtable初始化完毕,就调用虚函数,此时必然调用的基类中的实现。
而在析构函数中,因为子类的那部分已经被析构掉了,此时在父类的析构函数调用虚函数,调用的也只能是父类中的实现。
如果在构造函数中调用虚函数,会先调用父类中的实现,也就失去了多态的性质。
class A { public: virtual void print() { cout << "A" << endl; } A() { print(); } ~A() { //print(); } }; class B :public A { void print() { cout << "B" << endl; } }; int main() { A* ptr = new B; return 0; }
如果在析构函数中调用虚函数,也是同样的失去了多态性。
class A { public: virtual void print() { cout << "A" << endl; } A() { print(); } ~A() { print(); } }; class B :public A { void print() { cout << "B" << endl; } }; int main() { A* ptr = new B; delete ptr; return 0; }
出现上述结果的原因是因为,构造函数还没有将vptr和vtable初始化完毕,就调用虚函数,此时必然调用的基类中的实现。
而在析构函数中,因为子类的那部分已经被析构掉了,此时在父类的析构函数调用虚函数,调用的也只能是父类中的实现。
相关文章推荐
- 构造函数中调用虚成员函数问题
- C++中构造函数中调用虚函数的问题 转载
- 关于在C#中构造函数中调用虚函数的问题
- C++中构造函数中调用虚函数的问题
- C++中构造函数和析构函数避免调用虚函数的问题
- C++中 构造函数 析构函数 能否调用虚函数的问题
- C++中构造函数和析构函数避免调用虚函数的问题
- 一个将类的构造函数调用识别成函数指针的问题
- 关于基类构造函数调用虚函数实际调用的不是派生类的问题的原因
- C++中构造函数和析构函数避免调用虚函数的问题
- C++中构造函数和析构函数避免调用虚函数的问题
- 构造函数,析构函数内调用虚函数问题
- 构造函数和析构函数中调用虚函数有什么问题?
- C++中构造函数和析构函数避免调用虚函数的问题 转载
- 摘:C++中构造函数和析构函数避免调用虚函数的问题
- C++构造函数调用虚函数的问题
- 构造函数 中调用虚函数的问题
- c++有关构造函数和析构函数中调用虚函数问题
- 构造函数 中调用虚函数的问题
- 构造函数和析构函数中调用虚函数有什么问题