自動物件: 當封閉範圍時,以與定義相反的順序銷毀結論是。
非局部靜態物件: 執行 main(全域變數、靜態成員資料)後,以與定義相反的順序銷毀。
本地靜態物件: 控制流程第一次傳遞其定義時構造,並銷毀執行 main 後依相反順序(函數內的靜態變數)。
以與定義相反的順序銷毀,首先是成員子對象,然後是基類子對象。
依降序銷毀。如果在構造第 n 個元素期間發生異常,則首先析構元素 n-1 到 0。
在計算類別類型的純右值表達式時建構。當包含表達式完成求值時被銷毀。如果在求值期間發生異常,臨時物件將被正確銷毀。
動態物件: 使用動態陣列:
分配新的Foo[n] 並銷毀with delete[] p.在這兩種情況下,嘗試多次銷毀記憶體、銷毀後存取或使用不正確的銷毀機制(例如,針對單一物件的 delete[])會導致未定義的行為。如果在建構過程中發生異常,則會在異常傳播之前釋放動態分配的記憶體。
引用計數智慧指標:**
std::shared_ptr 銷毀託管物件作為最後一個std::shared_ptr
析構函數不應該拋出異常,因為這可能會終止程式。如果在物件銷毀期間發生異常,則會傳播該異常,並且所有先前被銷毀的子物件都會被正確銷毀。但是,如果動態物件在建構過程中發生異常,則會在異常傳播之前釋放內存,並且不會呼叫該物件的析構函數。
以上是C 中的物件是如何被銷毀的?的詳細內容。更多資訊請關注PHP中文網其他相關文章!