关于构造与析构过程中调用虚函数的问题
生活随笔
收集整理的這篇文章主要介紹了
关于构造与析构过程中调用虚函数的问题
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
今天面試碰到一個構造函數與析構函數中調用需虛函數的問題,當時不太確定,回來敲了一下,發現確實表現的不一樣,在網上一查發現另有玄機。
代碼:
# gcc version 4.8.2 (Ubuntu 4.8.2-19ubuntu1)#include <iostream>using namespace std;class A {public:A(){_print();}~A(){print_();}virtual void _print(){cout << "a" << endl;}virtual void print_(){cout << "b" << endl;} };class B : public A {public:B(){_print();}~B(){print_();}virtual void _print(){cout << "c" << endl;}virtual void print_(){cout << "d" << endl; } };int main(int argc, char** argv) {A *p = new B();delete p;return 0; }
輸出:
a
c
b
注:在vs2013下測試結果相同。
解析:
參照另一篇文章《基類析構函數為虛函數》
1. 構造子類對象,依次調用父類和子類構造函數,依次打印a,c;
2. 釋放對象,直接調用,指針類型的析構函數,即父類的析構函數,直接打印b;
注:
<<Effective C++>> 條款09 絕不在構造或析構過程中調用virtual函數。
轉載于:https://www.cnblogs.com/StoneHan/p/5797633.html
總結
以上是生活随笔為你收集整理的关于构造与析构过程中调用虚函数的问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: pap chap认证配置
- 下一篇: 《使命召唤11》低配设置心得分享 这样才