當(dāng)前位置:
首頁 >
C++学习笔记25,析构函数总是会宣布virtual
發(fā)布時(shí)間:2023/12/1
36
豆豆
生活随笔
收集整理的這篇文章主要介紹了
C++学习笔记25,析构函数总是会宣布virtual
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
為了永遠(yuǎn)記住析構(gòu)函數(shù)聲明virtual----><<effective c++>>
為這句話不一定對(duì),但無需質(zhì)疑的是這句話是非常實(shí)用的.
查看以下的樣例:
#include <iostream> #include <string> using namespace std; class B{ public:~B(){cout<<"base is destroyed!"<<endl;} }; class D:public B{ public:~D(){cout<<"dirved is destroyed!"<<endl;}};int main(){{D d;} }
這個(gè)是一個(gè)非常easy的樣例,輸出是肯定的.
可是,再看以下的測試!
#include <iostream> #include <string> using namespace std; class B{ public:~B(){cout<<"base is destroyed!"<<endl;} }; class D:public B{ public:~D(){cout<<"dirved is destroyed!"<<endl;}};int main(){{B *b=new D();delete b;} }
因此能夠看到,當(dāng)用一個(gè)基類的指針指向一個(gè)派生類的對(duì)象,直接刪除該指針時(shí),析構(gòu)函數(shù)調(diào)用鏈將會(huì)遭到破壞.
#include <iostream> #include <string> using namespace std; class B{ public:virtual ~B(){cout<<"base is destroyed!"<<endl;} }; class D:public B{ public:virtual ~D(){cout<<"dirved is destroyed!"<<endl;}};int main(){{B *b=new D();delete b;} }
因此應(yīng)該記得將析構(gòu)函數(shù)聲明為virtual,這樣就永遠(yuǎn)不用操心析構(gòu)函數(shù)調(diào)用鏈的破壞!
版權(quán)聲明:本文博主原創(chuàng)文章,博客,未經(jīng)同意不得轉(zhuǎn)載。
轉(zhuǎn)載于:https://www.cnblogs.com/zfyouxi/p/4843521.html
總結(jié)
以上是生活随笔為你收集整理的C++学习笔记25,析构函数总是会宣布virtual的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: thinkphp 删除该表的最后一行
- 下一篇: 环球影城门票身份证号码填错了