c 解構函式是怎麼釋放記憶體的

時間 2021-09-04 02:34:23

1樓:匿名使用者

你在方法2中可能例項化類1時沒有初始化指標,或者指標為空,程式結束時,呼叫解構函式delete一個野指標或空指標的時候就可能會出錯了,而你把方法1的指標換成物件,在程式結束的時候,即使你沒有清理,編譯器都會幫你釋放空間的,因此不會出錯。

2樓:匿名使用者

自動生成的只會原樣複製。如果你的類裡有一個指標,你給它分配了記憶體,然後在解構函式中釋放記憶體。如果使用自動生成的複製函式會造成重複釋放記憶體。

如果我用了new來分配記憶體 我又使用了 解構函式來釋放記憶體 會怎樣呢?

class c

~c()

private:

char *p;

};c a;

c b(a); //這裡使用系統生成的拷貝建構函式。a.p 與b.p是相同的。a和b的解構函式都會刪除p,就會重複刪除而出錯。

3樓:匿名使用者

關於解構函式的說明:

1。當程式的執行離開例項化自動物件所在的作用域時,自動物件就會撤銷,這時解構函式隱式呼叫.並不是說在main函式結束時才執行。

2。解構函式本身並不釋放物件佔用的記憶體空間,它只是在系統收回物件的記憶體空間之前執行掃尾工作.解構函式體內並不一定要有delete語句。可以有也可以沒

3。和建構函式一樣,每個類都有一個解構函式,即使沒有顯式提供一個解構函式,編譯器也會生成一個空的解構函式 .

補充說明:

離開例項化自動物件所在的作用域這句的意思就是說比如你有一個自定義類和一個自定義函式,你在這個函式裡宣告一個這個類的物件,這個物件就是例項化自動物件,它的作用域僅限於該函式體內,然後你在main函式裡呼叫這個函式,呼叫結束後,那個類的物件就離開了它的作用域,這時,那個類的解構函式就會被編譯器隱式呼叫。

當主函式結束,**記憶體的工作就開始了,但這個工作是由編譯器的記憶體**機制在後臺執行。如果在類的實現中,有動態分配記憶體和動態分配陣列的語句,那麼最好在解構函式裡提供delete語句!

更正二樓的一個觀點,解構函式絕不是在main函式結束時自動執行的!!!!!!

關於c 中析構函式析構順序問題

c 程式設計屬於邏輯思維,在設定乙個函式和數值中來回迴圈所得出的結論 無論是c語言還是c 語言,都是沒太大的順序。比如開始的c語言輸出 include vrio main 這是簡單的輸出,標頭檔案和輸出函式 輸出語句。只要一步步來,無論什麼都不會錯的。不過在c 語言裡面不能出現小錯誤,乙個小錯誤會影...

C 鏈佇列的析構函式 怎麼寫啊

呵呵,如果你類裡面沒使用malloc new 這類申請資源的函式,並且沒有自己想進行的善後工作,析構函式可以不寫的,甚至不宣告也可以 編譯器自動幫你加乙個預設的 或者你可以直接空的。binary op command void 如果不用指標之類,你的析構函式就空著好了。析構函式是用來做善後工作的。鍊...

c 中的析構函式與建構函式的區別

c 中的析構函式與建構函式的區別主要是功能上的區別 建構函式 是一種特殊的方法。主要用來在建立物件時初始化物件,即為物件成員變數賦初始值,總與new運算子一起使用在建立物件的語句中。特別的乙個類可以有多個建構函式 可根據其引數個數的不同或引數型別的不同來區分它們 即建構函式的過載。析構函式 dest...