首頁 >後端開發 >C++ >C標準如何保證一個類別中的成員建構函式和析構函式與其他類別的成員變數呼叫的順序?

C標準如何保證一個類別中的成員建構函式和析構函式與其他類別的成員變數呼叫的順序?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-11-08 06:31:02505瀏覽

How does the C   standard guarantee the order of member constructor and destructor calls in a class with member variables of other classes?

成員建構子與析構函數的呼叫順序

問題:

在C 中,當一個類別包含其他類別的成員變數時類,它們的初始化和銷毀的順序至關重要。考慮下面的程序:

在C 標準下,是否保證這個程式總是會產生以下輸出:

答案:

答案:

是的,是的

    根據 C標準第12.6.2 節,類內成員的初始化和銷毀遵循特定規則:
  • 初始化順序
  • 先初始化虛擬基類(如果有),深度優先,從左到右。
  • 接下來依照宣告順序初始化直接基類。
非靜態資料成員依照宣告順序初始化,無論成員初始化的順序為何。

建構函式體最後執行。
  • 銷毀順序
  • 先執行析構函數體的複合語句。
  • 非靜態資料成員依
  • 相反
  • 宣告順序銷毀。
直接基類依聲明順序銷毀。

虛擬基類(如果有)最後銷毀,以反向深度優先、從左到右的順序。 在提供的範例中,Aggregate 結構體的成員會依照 a、b 和 c 的順序宣告。因此,確保它們將按 A::A、B::B 和 C::C 的順序初始化,並以相反的順序 C::~、B::~ 和 A::~ 銷毀。

以上是C標準如何保證一個類別中的成員建構函式和析構函式與其他類別的成員變數呼叫的順序?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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