首頁 >後端開發 >C++ >為什麼 C 中的臨時物件會以令人驚訝的順序被銷毀?

為什麼 C 中的臨時物件會以令人驚訝的順序被銷毀?

DDD
DDD原創
2024-11-13 08:54:02338瀏覽

Why Are Temporary Objects Destroyed in a Surprising Order in C  ?

C 中的臨時物件銷毀

提供的程式碼示範了一種令人驚訝的行為,即臨時物件以意外的順序順序被銷毀。然而,這種行為實際上是由 C 標準保證的。

說明

臨時對象,也稱為未命名對象,是在表達式計算結果為不是引用類型的類別類型。它們通常用於在表達式求值期間保存中間結果。

在給定的程式碼中,從字串文字建立類型 Foo 的臨時對象,並在物件的生命週期結束時呼叫其析構函數。析構函數列印儲存在物件的 m_name 成員中的名稱。

臨時物件的生命週期在創建它的完整表達式的末尾結束。在提供的程式碼中,完整表達式是語句:

Foo{ "one" };

因此,臨時物件的生命週期在此語句後面的分號處結束。結果,呼叫臨時物件的析構函數,並列印字串“one”。

規則的例外

雖然一般規則規定臨時物件在完整表達式結束時被銷毀,C 標準中指定了一些例外([class.temporary] p5 -p7):

  • 縮短數組初​​始值設定項中預設構造的臨時物件的生命週期。
  • 複製陣列時縮短建構子的預設參數的生命週期。
  • 透過綁定對臨時物件的引用來延長臨時物件的生命週期。
  • 延長生命週期for-range-initializer 中的暫時物件。

這些例外允許在特定情況下更靈活地管理臨時物件的生命週期。

以上是為什麼 C 中的臨時物件會以令人驚訝的順序被銷毀?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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