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

C 中的物件是如何被銷毀的?

Barbara Streisand
Barbara Streisand原創
2024-12-10 09:45:12651瀏覽

How Are Objects Destroyed in C  ?

C 中的物件銷毀

作用域物件

自動物件: 當封閉範圍時,以與定義相反的順序銷毀結論是。
非局部靜態物件: 執行 main(全域變數、靜態成員資料)後,以與定義相反的順序銷毀。
本地靜態物件: 控制流程第一次傳遞其定義時構造,並銷毀執行 main 後依相反順序(函數內的靜態變數)。

基類和成員子對象:**

以與定義相反的順序銷毀,首先是成員子對象,然後是基類子對象。

陣列元素:**

依降序銷毀。如果在構造第 n 個元素期間發生異常,則首先析構元素 n-1 到 0。

臨時物件:**

在計算類別類型的純右值表達式時建構。當包含表達式完成求值時被銷毀。如果在求值期間發生異常,臨時物件將被正確銷毀。

動態物件與陣列:**

動態物件: 使用動態陣列:
分配新的Foo[n] 並銷毀with delete[] p.在這兩種情況下,嘗試多次銷毀記憶體、銷毀後存取或使用不正確的銷毀機制(例如,針對單一物件的 delete[])會導致未定義的行為。如果在建構過程中發生異常,則會在異常傳播之前釋放動態分配的記憶體。

引用計數智慧指標:**

std::shared_ptr:

銷毀託管物件作為最後一個std::shared_ptr;引用它的對像被破壞。

異常行為:

析構函數不應該拋出異常,因為這可能會終止程式。如果在物件銷毀期間發生異常,則會傳播該異常,並且所有先前被銷毀的子物件都會被正確銷毀。但是,如果動態物件在建構過程中發生異常,則會在異常傳播之前釋放內存,並且不會呼叫該物件的析構函數。

以上是C 中的物件是如何被銷毀的?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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