C++ 析構(gòu)函數(shù)與變量的生存周期實例詳解
這篇介紹了析構(gòu)函數(shù),是我的讀書筆記,我希望它夠簡短但又比較全面,起到復習的作用。如果有一些C++知識記不清楚了,它可以幫你很快回憶起來。
析構(gòu)函數(shù)(destructor)的名字與類名相同,但是前面要加“~”。析構(gòu)函數(shù)沒有參數(shù)和返回值,當然也就不能被重載。
何時調(diào)用析構(gòu)函數(shù)
析構(gòu)函數(shù)在對象消亡時自動調(diào)用,這是都了解的情況,但是實際上這還隱含的說:函數(shù)的參數(shù)對象以及作為函數(shù)返回值的對象,在消亡時也會引發(fā)析構(gòu)函數(shù)調(diào)用。
#include<iostream>using namespace std;class CNum {public: int num; ~CNum() { cout << "destructor" << endl; } CNum() { num = 0; cout << "constractor CNum()" << endl; } CNum(CNum & n) { num = n.num; cout << "constractor CNum(CNum & n)" << endl; }};CNum fun(CNum n) { cout << "fun()start" << endl; n.num = 3; //這里的修改只是對形參的修改,對實參沒影響 return n;}int main() { CNum n1; n1 = fun(n1); return 0;}運行結(jié)果:
constractor CNum()
constractor CNum(CNum & n) //構(gòu)造形參n
fun()
constractor CNum(CNum & n) //構(gòu)造作為返回值的臨時對象
destructor //fun的返回值是一個臨時對象,臨時對象的生存周期只有一條語句
destructor //離開fun(),形參n消亡
destructor //main結(jié)束時局部變量n1消亡
請按任意鍵繼續(xù). . .
調(diào)用函數(shù)時使用傳引用而不是直接傳遞對象,可以省掉很多次不必要的函數(shù)調(diào)用,特別是這個函數(shù)會被頻繁調(diào)用的時候。
虛析構(gòu)函數(shù)
析構(gòu)函數(shù)可以是虛函數(shù),但是構(gòu)造函數(shù)不能。(想一想構(gòu)造函數(shù)可以重載,但析構(gòu)函數(shù)不能,這對冤家也算扯平了吧 主站蜘蛛池模板: 普宁市| 临夏县| 惠来县| 常熟市| 浦县| 梅州市| 南丰县| 理塘县| 奉化市| 黔西县| 华亭县| 西藏| 长葛市| 岳池县| 永泰县| 屏东县| 西华县| 鞍山市| 包头市| 江北区| 林周县| 邻水| 绥棱县| 江孜县| 许昌县| 崇左市| 宿松县| 新巴尔虎左旗| 台山市| 丹凤县| 图木舒克市| 新兴县| 分宜县| 江都市| 北碚区| 印江| 于都县| 资中县| 西贡区| 密云县| 嘉荫县|