![How Does Object Destruction Work in C ?](https://img.php.cn/upload/article/000/000/000/173257063645810.jpg)
C 中的對象銷毀
對象銷毀:什麼、何時以及如何
C ,物件可以大致分為作用域物件和動態物件。作用域物件的生命週期與其封閉範圍(例如局部變數、全域變數、類別實例)相關,而動態物件是使用指標建立和銷毀的(例如 new、delete)。
作用域物件
-
自動物件:當控制流退出其範圍(例如,函數退出、區塊結束)時,以創建的相反順序銷毀。
-
非本地靜態物件: 在 main 之後以建立的相反順序銷毀() 執行。
-
本地靜態物件: 當控制流程進入其定義時建構第一次,並在 main() 執行後以相反的順序銷毀。
-
基底類別和成員子物件: 在物件的析構函數中以相反的順序銷毀,然後是其基底類別子物件。
-
陣列元素: 依降序銷毀
-
臨時物件: 從純右邊值表達式創建,在計算完整表達式時銷毀。
動態物件
- 動態物件(新Foo):透過明確呼叫delete p.
- 動態數組(new Foo[n]):透過明確呼叫delete[] p.
銷毀異常處理
- 異常透過堆疊的自動物件堆疊回來,對析構函數。
- 析構函數永遠不應該拋出異常。
- 如果在物件建構過程中發生異常,則在異常發生之前釋放底層記憶體拋出。
手動物件銷毀
由於C缺少垃圾回收器,動態物件必須手動釋放,防止資源外洩。
智慧指標
-
引用計數智慧指標(std::shared_ptr): 當引用它的最後一個std::shared_ptrd::shared_ptrd::shared_ptrd::shared_ptrd::shared_ptrd::shared_ptrd被銷毀時,自動銷毀底層物件。
以上是C 中的物件銷毀如何運作?的詳細內容。更多資訊請關注PHP中文網其他相關文章!