关于构造与析构过程中调用虚函数的问题
生活随笔
收集整理的這篇文章主要介紹了
关于构造与析构过程中调用虚函数的问题
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
今天面試碰到一個(gè)構(gòu)造函數(shù)與析構(gòu)函數(shù)中調(diào)用需虛函數(shù)的問題,當(dāng)時(shí)不太確定,回來敲了一下,發(fā)現(xiàn)確實(shí)表現(xiàn)的不一樣,在網(wǎng)上一查發(fā)現(xiàn)另有玄機(jī)。
代碼:
# 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下測(cè)試結(jié)果相同。
解析:
參照另一篇文章《基類析構(gòu)函數(shù)為虛函數(shù)》
1. 構(gòu)造子類對(duì)象,依次調(diào)用父類和子類構(gòu)造函數(shù),依次打印a,c;
2. 釋放對(duì)象,直接調(diào)用,指針類型的析構(gòu)函數(shù),即父類的析構(gòu)函數(shù),直接打印b;
注:
<<Effective C++>> 條款09 絕不在構(gòu)造或析構(gòu)過程中調(diào)用virtual函數(shù)。
轉(zhuǎn)載于:https://www.cnblogs.com/StoneHan/p/5797633.html
總結(jié)
以上是生活随笔為你收集整理的关于构造与析构过程中调用虚函数的问题的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: pap chap认证配置
- 下一篇: 用csc命令行手动编译cs文件