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

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

Susan Sarandon
Susan Sarandon原創
2024-11-26 09:27:10348瀏覽

When Do Temporary Objects in C   Get Destroyed?

C 中的臨時物件銷毀

C 中的臨時物件何時被銷毀?當考慮以下程式碼片段時,就會出現這個問題:

#include <iostream>

struct Foo
{
    const char* m_name;

    ~Foo() { std::cout << m_name << '\n'; }
};

int main()
{
    Foo foo{"three"};
    Foo{"one"};   // unnamed object
    std::cout << "two" << '\n';
}

程式碼列印「一」、「二」和「三」。如果臨時物件在創建後立即被銷毀,則此行為可能看起來出乎意料。然而,事實並非如此。

[class.temporary] p4 中定義的臨時物件在包含它們建立點的完整表達式的末尾被銷毀。在上面的範例中,完整表達式是整個 main 函數,因此臨時 Foo 物件在分號處被銷毀。

此行為是標準保證的,使得給定程式碼的輸出在 C 編譯器中保持一致。但是,一般規則有一些例外:

  • 數組初始值設定項中預設構造的臨時物件的生命週期可能會縮短。
  • 陣列複製期間建構函數的預設參數也可能會縮短它們的生命週期縮短了。
  • 綁定對臨時物件的引用可以延長它們的壽命生命週期。
  • for-range-initializer 中的臨時物件具有較長的生命週期。

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

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