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ù)不能,這對冤家也算扯平了吧 主站蜘蛛池模板: 丹凤县| 丰城市| 萝北县| 五指山市| 杭锦旗| 油尖旺区| 峡江县| 赞皇县| 商丘市| 邻水| 石渠县| 鄢陵县| 繁昌县| 泸州市| 嵩明县| 刚察县| 淅川县| 阿拉善右旗| 马龙县| 鸡泽县| 南华县| 嘉定区| 兴义市| 平塘县| 凤冈县| 静宁县| 乌兰察布市| 清苑县| 西藏| 尚志市| 嫩江县| 赤壁市| 襄城县| 黔西| 靖边县| 鹤庆县| 乐至县| 庄浪县| 巴南区| 舞阳县| 安泽县|