對象的銷毀(十七)
阿新 • • 發佈:2018-05-19
C++ 析構函數 我們在平時的生活中,對象都是被初始化後才上市的,它被銷毀前會做一些清理工作。那麽在 C++ 中如何清理需要銷毀的對象呢?一般而言,需要銷毀的對象都應該做清理。解決方案是:為每個類都提高一個 public 的 free 函數,當對象不再需要時立即調用 free 函數進行清理。 。
回想下我們之前創建的數組類,也是這樣做的。但是這有個問題:free 只是一個普通的函數,必須顯示的調用。對象銷毀前沒有做清理,便很可能造成資源泄露。那麽 C++ 編譯器是否能夠自動調用某個特殊的函數進行對象的清理呢?在 C++ 的類中可以定義一個特殊的清理函數,這個特殊的清理函數叫做析構函數。析構函數的功能與構造函數相反,它的定義為:~ClassName()。析構函數沒有參數也沒有返回值類型聲明,析構函數在對象銷毀時自動被調用
下來我們以代碼為例進行析構函數的使用說明
#include <stdio.h> class Test { private: int mi; public: Test(int i) { mi = i; printf("Test(): %d\n", mi); } ~Test() { printf("~Test(): %d\n", mi); } }; int main() { Test t1(1); Test* p = new Test(2); delete p; return 0; }
編譯結果如下
我們在程序中沒有手動調用析構函數,但是它在 return 之前被自動調用了。我們由此可以優化之前寫的數組類。將 free 函數改為析構函數,便可以在 main 函數中去掉 a.free() 和 b.free() 函數了。
析構函數的定義準則:當類中自定義了構造函數,並且構造函數中使用了系統資源(如:內存申請,文件打開等),則需要自定義析構函數。通過對析構函數的學習,總結如下:1、析構函數是對象銷毀時進行清理的特殊函數;2、析構函數在對象銷毀時自動被調用;3、析構函數是對象釋放系統資源的保障。
歡迎大家一起來學習 C++ 語言,可以加我QQ: 243343083。
對象的銷毀(十七)