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 編譯器中保持一致。但是,一般規則有一些例外:
以上是C 中的臨時物件何時被銷毀?的詳細內容。更多資訊請關注PHP中文網其他相關文章!