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

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

Patricia Arquette
發布: 2024-11-12 12:45:02
原創
863 人瀏覽過

When Are Temporary Objects in C   Destroyed?

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';
}
登入後複製

此程式碼是否會列印「一二三」?未必。此行為取決於 C 編譯器和用於編譯的特定設定。

根據 C 標準 ([class.temporary] p4),臨時物件的生命週期持續到其建立的完整表達式結束為止在提供的範例中,完整的表達式是整個 main 函數。因此,臨時 Foo 物件的銷毀發生在 main 的末尾,這符合觀察到的列印順序。

但是,[class.temporary] p5、p6 和 p7 定義了此一般規則的幾個例外。例如,可以縮短數組初​​始化時臨時物件的生命週期。此外,將引用綁定到臨時物件或在 for-range-initializer 中使用它可以延長其生命週期。

總之,C 中臨時物件銷毀的精確時間由標準控制。雖然在大多數情況下,臨時變數在創建它們的表達式末尾被銷毀,但某些異常和編譯器最佳化可以改變這種行為。理解這些細微差別對於編寫正確且可預測的 C 程式碼至關重要。

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

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板