C 中的臨時物件銷毀
提供的程式碼示範了一種令人驚訝的行為,即臨時物件以意外的順序順序被銷毀。然而,這種行為實際上是由 C 標準保證的。
說明
臨時對象,也稱為未命名對象,是在表達式計算結果為不是引用類型的類別類型。它們通常用於在表達式求值期間保存中間結果。
在給定的程式碼中,從字串文字建立類型 Foo 的臨時對象,並在物件的生命週期結束時呼叫其析構函數。析構函數列印儲存在物件的 m_name 成員中的名稱。
臨時物件的生命週期在創建它的完整表達式的末尾結束。在提供的程式碼中,完整表達式是語句:
Foo{ "one" };
因此,臨時物件的生命週期在此語句後面的分號處結束。結果,呼叫臨時物件的析構函數,並列印字串“one”。
規則的例外
雖然一般規則規定臨時物件在完整表達式結束時被銷毀,C 標準中指定了一些例外([class.temporary] p5 -p7):
這些例外允許在特定情況下更靈活地管理臨時物件的生命週期。
以上是為什麼 C 中的臨時物件會以令人驚訝的順序被銷毀?的詳細內容。更多資訊請關注PHP中文網其他相關文章!