析構函式到底都做了什麼

2021-07-10 10:06:10 字數 442 閱讀 2293

析構函式釋放物件所使用的資源,並且銷毀物件的非static資料成員。

析構函式是類的乙個成員函式,名字有波浪號接類名構成。沒有返回值,也不接受引數,同時由於析構函式不接受引數,因此它不能過載,所以任何乙個類都只具有乙個析構函式。

析構函式具有乙個函式體和乙個析構部分。首先執行函式體,然後執行析構部分,來銷毀成員,但是析構部分是隱式的。

其實析構部分就已經把成員給銷毀了,那為什麼還需要函式體呢?

個人認為是因為隱式銷毀乙個內建指標型別的成員不會delete它所指向的物件,所以需要函式體來顯式銷毀乙個內建指標型別。

而且當指向乙個物件的引用或指標離開作用域時,析構函式不會執行。此處的析構函式是指的這個物件的析構函式,但是我們可以使用智慧型指標shared_ptr,因為這個指標會執行析構函式,當指向這個物件的智慧型指標的引用計數變為0的時候,這個物件就自動被釋放了。

fork函式到底做了什麼?

實體地址和邏輯位址 或稱虛擬位址 的概念。使用者程式看不見真正的實體地址。使用者只生成邏輯位址,且認為程序的位址空間為0到max。實體地址範圍從r 0到r max,r為基位址,位址對映 將程式位址空間中使用的邏輯位址變換成記憶體中的實體地址的過程。由記憶體管理單元 mmu 來完成。fork 會產生乙...

php建構函式和析構函式到底幹嘛用的

一說到php魔術方法,最先想到的就是構造和析構函式,那麼,他們到底有什麼神奇的地方,而被稱為魔術方法,並被當做代表人物呢 一.建構函式 construct 有建構函式的類會在每次建立新物件時呼叫此函式,所以可以在此函式內做一些使用物件之前的初始化。我最早接觸到這個函式是在寫登入的時候,會在公共控制器...

Lambda函式到底是個什麼

lambda函式是指簡單的 片段,通常認為是不值得命名的函式,它不能重複使用,能方便程式設計師使用,增強 可讀性,降低 出錯概率。捕獲列表 引數 返回型別編譯器通常會計算lambda函式的返回型別,所以一般不需要指定返回型別,但少數情況編譯器可能無法判斷返回型別,還是需要指定返回型別。c 定義了許多...