1樓:網友
1.分配的記憶體會在程式退出前釋放,所以無所謂記憶體洩露的情況。
記憶體洩漏:程式執行時,產生了沒法管理的非0指標。那麼必然有段記憶體無法delete掉。
2.解構函式是在return前呼叫的。因為return已經是要返回作業系統了。
就是退出程式吧,就想成是快速的退出程式(return 作業系統)吧。我也不知道我這樣說對了沒。
解構函式為什麼能釋放物件記憶體?
2樓:吳建濤
解構函式不能釋放物件記憶體,只是解構函式中可以釋放一些這個物件所佔有的資源(包括記憶體),這是要靠你自己寫程式完成的,不能自動完成,而c++在需要收回這個物件所佔有的記憶體的時候會呼叫解構函式,但是c++自己是不會收回該物件申請的動態記憶體的,也就是new出來的記憶體,所以一般要考程式設計師自己在解構函式中完成釋放。
3樓:神鵰俠之父
解構函式(destructor) 與建構函式相反,,建構函式是新建物件時自動呼叫,而解構函式則是當物件脫離其作用域時(例如物件所在的函式已呼叫完畢),系統自動執行。解構函式往往用來做「清理善後」 的工作(例如在建立物件時用new開闢了一片記憶體空間,應在退出前在解構函式中用delete釋放)。
解構函式里什麼操作語句也沒有,為什麼就能釋放物件記憶體呢? 這話有問題,應該是在推出前用delete釋放記憶體,不能自動釋放。
4樓:琉璃易碎
關於解構函式的說明:
1.當程式的執行離開例項化自動物件所在的作用域時,自動物件就會撤銷,這時解構函式隱式呼叫。並不是說在main函式結束時才執行。
2.解構函式本身並不釋放物件佔用的記憶體空間,它只是在系統收回物件的記憶體空間之前執行掃尾工作。解構函式體內並不一定要有delete語句。可以有也可以沒。
3.和建構函式一樣,每個類都有乙個解構函式,即使沒有顯式提供乙個解構函式,編譯器也會生成乙個空的解構函式 .
c++解構函式是怎麼釋放記憶體的?山東
5樓:網友
樓上的不知道從**複製過來的一段。。。
解構函式名同類名,區別在於解構函式前有"~"符號,功能於建構函式相反乙個物件在他的壽命結束時,系統將會自動呼叫解構函式將他釋放掉,從而實現記憶體的釋放,被釋放的物件不可再使用。
舉個小例子:
假設我已經定義了乙個date1的類,其實有date1的建構函式和解構函式,在main中我建立有2個物件d1和d2(先建立d1再建立d2)。在退出主程式前,d1,d2結束了他們的壽命,系統呼叫解構函式釋放記憶體,先釋放d2再釋放 d1順序於建立相反。
什麼是c析構函式,在C 中什麼叫析構函式,怎麼用啊?舉個列啊,謝謝!!!
析構函式和建構函式正好相反.建構函式是和類同名.沒有返回值.析構函式是在類名前加 也沒有返回值.建構函式上在物件建立時執行.析構函式是在程式結束時執行.一般時候析構函式裡面寫的都是一些資源 之類的東西.不過c 的析構函式的呼叫機制和c 不同.並不能保證每次都會呼叫.所以最好不要利用c 的析構函式來 ...
C建構函式的過載問題,C建構函式和析構函式可以過載嗎
因為對於後者來說,當執行my class c1語句時,c1可以呼叫my class建立物件,也可以呼叫my class float x 3.5,float y 8.5 建立物件.但是這會產生兩個不同的c1物件,極易發生歧義。所以系統不知道要呼叫那個建構函式產生物件,也不會允許程式這麼做。c 建構函式...
c中建構函式和析構函式能不能被顯示呼叫
1 c 中,建構函式和析構函式可以被顯示呼叫.顯示呼叫預設建構函式的語法 a.a a 不能寫成a.a 顯示呼叫非預設建構函式的語法 a.a a 7 不能寫成a.a 7 顯示呼叫析構函式的語法 a.a a 可以寫成a.a 2 顯示呼叫建構函式和析構函式就像呼叫一般的函式一樣,並不意味著建立或銷毀物件 ...