Rumah > Artikel > pembangunan bahagian belakang > Bagaimanakah piawaian C menjamin susunan pembina ahli dan panggilan pemusnah dalam kelas dengan pembolehubah ahli kelas lain?
Masalah:
Dalam C , apabila kelas mengandungi pembolehubah ahli yang lain kelas, susunan permulaan dan pemusnahannya adalah penting. Pertimbangkan program berikut:
#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; }
Di bawah piawaian C, adakah program ini dijamin sentiasa menghasilkan output berikut:
A::A B::B C::C C::~ B::~ A::~
Jawapan:
Ya, ia dijamin.
Menurut seksyen 12.6.2 standard C, permulaan dan pemusnahan ahli dalam kelas mengikut peraturan tertentu:
Dalam contoh yang disediakan, ahli struct Agregat diisytiharkan dalam susunan a, b dan c. Oleh itu, ia dijamin bahawa ia akan dimulakan dalam susunan A::A, B::B, dan C::C dan dimusnahkan dalam susunan terbalik C::~, B::~, dan A::~.
Atas ialah kandungan terperinci Bagaimanakah piawaian C menjamin susunan pembina ahli dan panggilan pemusnah dalam kelas dengan pembolehubah ahli kelas lain?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!