1樓:卷愉錢精
解構函式(destructor)
與建構函式相反,,建構函式遊姿是新建物件時自動呼叫,而解構函式則是當物件脫離其作用域時(例如物件所在的函式已呼叫陸舉完畢),系統自動執行。解構函式往往用來做「清理善後」
的工作(例如在建立物件時用new開闢了一片記憶體空間,應在退出前在解構函式中用delete釋早磨碧放)。
解構函式里什麼操作語句也沒有,為什麼就能釋放物件記憶體呢?
這話有問題,應該是在推出前用delete釋放記憶體,不能自動釋放。
2樓:堅俐卯貞
關於解構函式的說明:
1.當程式的桐簡執行離開例項化自動物件所在的作用域時,自動物件就會團輪李撤銷,這時解構函式隱式呼叫。並不是說在main函式結束時才執行。
2.解構函式本身並不釋放物件佔用的記憶體空間,它只是在系統收回物件的記憶體空間之前執行掃尾工作。解構函式體內並不一定要有delete語句。可以有也可以沒。
3.和建構函式一樣,每個類都有乙個解構函式,即使沒有顯式提供塌遲乙個解構函式,編譯器也會生成乙個空的解構函式。
3樓:吳建濤
解構函式不能釋放物件記憶體,只是解構函式中可以釋放一些這個物件所佔有的資源(包括記憶體),這是要靠你自己寫程式完成的,不能自動完成,而c++在需要收回這個物件所佔有的記憶體的時候會呼叫解構函式,但是c++自己是不會收回該物件申請的動態記憶體的,也就是new出來的記憶體,所以一般要考程式設計師自己在解構函式中完成釋放。
c++解構函式是怎麼釋放記憶體的?山東
4樓:網友
樓上的不知道從**複製過來的一段。。。
解構函式名同類名,區別在於解構函式前有"~"符號,功能於建構函式相反乙個物件在他的壽命結束時,系統將會自動呼叫解構函式將他釋放掉,從而實現記憶體的釋放,被釋放的物件不可再使用。
舉個小例子:
假設我已經定義了乙個date1的類,其實有date1的建構函式和解構函式,在main中我建立有2個物件d1和d2(先建立d1再建立d2)。在退出主程式前,d1,d2結束了他們的壽命,系統呼叫解構函式釋放記憶體,先釋放d2再釋放 d1順序於建立相反。
解構函式可以過載嗎,C建構函式和解構函式可以過載嗎
c 嗎,不能過載析構bai函式,只能聲du明為虛擬函式,為了多型zhi發生時dao能夠完全析構 只有構回 造函式才能重答 載,用於多種方式構造物件 如果通過基類指標動態構造公有派生類物件,再通過基類指標來動態釋放該物件就會發生這個問題,原因和過程很多教科書上都有,此時,基類的解構函式就要定義為vir...
單繼承和多繼承的派生類建構函式和解構函式的構造規則和執行順序是怎樣的
多繼承派生類建構函式的執行順序是先執行所有基類的建構函式 順序按照定義派生類時指定的各基類順序 再執行派生類的建構函式,解構函式執行順序,與建構函式完全相反 因為,資料是按棧儲存的 單繼承先執行基類建構函式,在執行派生類建構函式,解構函式執行順序與建構函式相反。當基類的建構函式沒有引數,或沒有顯式定...
c 關於解構函式,我有些不明白,請高手指點
第一,關於析構 樓上二位基本說的沒錯,c c 中,大括號限定了其中變數的生存週期,以你的 為例 1 int main 2 變數one和two在第3行被宣告並初始化 可以比喻成小孩出生了,此時建構函式被呼叫 在第5行的右大括號之前,這兩個變數 活到頭了 此時解構函式被呼叫。換句話說,大括號之間的任何變...