C 析构函数
C 析構函數概述
C 析構函數是一個特殊的成員函數,作用與構造函數相反,它的名字是類名的前面加一個~符號,析構函數是與構造函數作用相反的函數,當對象的生命期結束時,會自動執行析構函數。
C 執行析構函數的情況
如果在一個函數中定義了一個對象,當這個函數被調用結束時,對象應該釋放,在對象釋放前自動執行析構函數。static局部對象在函數調用結束時對象并不釋放,因此也不調用析構函數,只在main函數結束調用exitt函數結束程序時,才調用static局部對象的析構函數。如果定義了一個全局對象,則在程序的流程離開其作用域時,調用該全局對象的析構函數。
如果用new運算符動態地建立了一個對象,當用delete運算符釋放該對象時,先調用該對象的析構函數。?
C 析構函數詳解
析構函數的作用并不是刪除對象,而是在撤銷對象占用的內存之前完成一些清理工作,使這部分內存可以被程序分配給新對象使用。
析構函數不返回任何值,沒有函數類型,也沒有函數參數,因此不能重載,一個類可以有多個構造函數,但只能有一個析構函數。?
析構函數的作用并不僅限于釋放資源方面,它還可以被用來執行程序員希望在最后一次使用對象之后所執行的任何操作。
如果沒有定義析構函數,C 編譯系統會自動生成一個析構函數,但它只是徒有析構函數的名稱和形式,實際上什么都不執行,要想讓析構函數執行,必須在定義的析構函數中指定。
案例:C 析構函數案例
#include? using?namespace?std; class?Number {public:void?setNumber(?double?num );double?getNumber(?void?);Number();?// 這是構造函數聲明~Number();?// 這是析構函數聲明private:float?number; }; // 成員函數定義,包括構造函數 Number::Number(void) {cout?<<?"我是構造函數"?<<?endl; } Number::~Number(void) {cout?<<?"我是析構函數"?<<?endl; }void?Number::setNumber(?double?num ) {number = num; }double?Number::getNumber(?void?) {return?number; } // 程序的主函數 int?main( ) {Number num;num.setNumber(6.0);?// 設置長度cout?<<?"學號是:"?<< num.getNumber() <<endl;return?0; }編譯運行結果:
我是構造函數 學號是:6 我是析構函數-------------------------------- Process exited after?2.047?seconds?with?return?value?0 請按任意鍵繼續. . .聲明:
本文于網絡整理,版權歸原作者所有,如來源信息有誤或侵犯權益,請聯系我們刪除或授權事宜。
總結
- 上一篇: 常见的数列构造法公式
- 下一篇: C 构造函数重载