首頁  >  文章  >  後端開發  >  C 中的臨時物件何時被銷毀?

C 中的臨時物件何時被銷毀?

Barbara Streisand
Barbara Streisand原創
2024-11-12 17:34:02236瀏覽

When are Temporary Objects Destroyed in C  ?

C 中的臨時物件銷毀

在 C 中,臨時物件是在表達式求值期間按需建立的。這些物件僅存在於表達式的範圍內,並在表達式結束後自動銷毀。

請考慮以下包含三行程式碼的範例:

Foo foo{"three"};
Foo{"one"};
std::cout << "two" << '\n';

程式碼列印「one,」「兩個、」和「三」的順序。此行為是由以下管理臨時物件銷毀的規則引起的:

表達式求值結束時的銷毀

臨時物件在完成完整表達式的求值後來被銷毀,其中他們被創造了。在此範例中,「一」和「三」的臨時物件在它們所在的對應行之後被銷毀。

規則的例外

雖然臨時物件銷毀通常遵循此規則,存在特定的例外情況,如[class.temporary] 所述p4-p7:

  1. 縮短了數組初始值設定項中預設構造的臨時物件的生命週期。
  2. 縮短了陣列複製期間預設建構函數參數的生命週期。
  3. 延長了透過綁定對臨時物件的引用來臨時物件。
  4. 延長臨時物件的生命週期for-range-initializer.

在提供的範例中,這些異常都不適用,因此臨時物件在各自的行之後被銷毀,從而產生指定的輸出。

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

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