首頁 >後端開發 >C++ >C 中的物件銷毀如何運作?

C 中的物件銷毀如何運作?

Linda Hamilton
Linda Hamilton原創
2024-11-26 05:37:08962瀏覽

How Does Object Destruction Work in C  ?

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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn