C 中的成員初始化和銷毀順序
在C 中,成員物件初始化和銷毀行為的順序對於理解行為至關重要的複雜資料結構。讓我們考慮以下程序:
#include <iostream> using namespace std; struct A { A() { cout << "A::A" << endl; } ~A() { cout << "A::~" << endl; } }; struct B { B() { cout << "B::B" << endl; } ~B() { cout << "B::~" << endl; } }; struct C { C() { cout << "C::C" << endl; } ~C() { cout << "C::~" << endl; } }; struct Aggregate { A a; B b; C c; }; int main() { Aggregate a; return 0; }
程式建立一個聚合結構體的實例,其中包含其他三個結構體 A、B 和 C。當我們執行程式時,會產生以下輸出:
A::A B::B C::C C::~ B::~ A::~
這個輸出提出了一個問題:這個構造和銷毀的順序是否由 C 標準保證?
答案是 是。依據C 標準(12.6.2),聚合結構體的成員依下列順序初始化與析構:
初始化順序:
銷毀順序:
因此,對於給定的程序,成員構造和銷毀的順序保證為:
這個保證在C 中建立和銷毀複雜資料結構時行為一致。
以上是C聚合中成員物件的初始化和銷毀順序是如何決定的?的詳細內容。更多資訊請關注PHP中文網其他相關文章!