首頁 > 後端開發 > C++ > C繼承中構造和析構的順序是什麼?

C繼承中構造和析構的順序是什麼?

DDD
發布: 2024-11-29 12:04:11
原創
681 人瀏覽過

What's the Order of Construction and Destruction in C   Inheritance?

繼承中的構造和析構順序

考慮以下類別層次結構:

struct A {
    A() { std::cout << "A() C-tor" << std::endl; }
    ~A() { std::cout << "~A() D-tor" << std::endl; }
};

struct B : public A {
    B() { std::cout << "B() C-tor" << std::endl; }
    ~B() { std::cout << "~B() D-tor" << std::endl; }

    A a;
};
登入後複製

當B 被創建(如int main() { B b; }),建構和銷毀順序遵循特定的規則:

建構順序:

  1. 基類建構子:先呼叫基底類別(A)的建構函數。
  2. 成員欄位建構:派生類別的成員欄位(B) 依照宣告的順序建構。在本例中,建構了類別 A 的實例 a。
  3. 衍生類別建構子: 最後呼叫衍生類別 (B) 的建構子。

這將轉換為以下呼叫順序:

  • A()
  • A(a)
  • B()

銷毀順序:

  1. 衍生類析構函數: 先呼叫派生類別 (B) 的析構函數。
  2. 成員欄位銷毀: 衍生類別的成員欄位依照與建構時相反的順序銷毀。在這種情況下,類別 A 的實例 a 被銷毀。
  3. 基類析構函數: 最後呼叫基底類別 (A) 的析構函數。

這會導致以下破壞order:

  • ~B()
  • ~A(a)
  • ~A()

因此,建構順序從基底類別開始,繼續到成員字段,最後到派生類別。銷毀順序與建構順序相反。

以上是C繼承中構造和析構的順序是什麼?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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