Rumah > pembangunan bahagian belakang > C++ > Bagaimanakah piawaian C menjamin susunan pembina ahli dan panggilan pemusnah dalam kelas dengan pembolehubah ahli kelas lain?

Bagaimanakah piawaian C menjamin susunan pembina ahli dan panggilan pemusnah dalam kelas dengan pembolehubah ahli kelas lain?

Mary-Kate Olsen
Lepaskan: 2024-11-08 06:31:02
asal
564 orang telah melayarinya

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

Tertib Panggilan Pembina dan Pemusnah Ahli

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;
}
Salin selepas log masuk

Di bawah piawaian C, adakah program ini dijamin sentiasa menghasilkan output berikut:

A::A
B::B
C::C
C::~
B::~
A::~
Salin selepas log masuk

Jawapan:

Ya, ia dijamin.

Menurut seksyen 12.6.2 standard C, permulaan dan pemusnahan ahli dalam kelas mengikut peraturan tertentu:

Perintah Permulaan

  • Kelas asas maya (jika ada) dimulakan dahulu, kedalaman -pertama, kiri-ke-kanan.
  • Kelas asas langsung dimulakan seterusnya, dalam pengisytiharan tertib.
  • Ahli data bukan statik dimulakan dalam susunan pengisytiharan, tanpa mengira susunan permulaan ahli.
  • Badan pembina dilaksanakan terakhir.

Pemusnahan Perintah

  • Pernyataan kompaun badan pemusnah dilaksanakan pertama.
  • Ahli data bukan statik dimusnahkan dalam urutan perisytiharan terbalik.
  • Kelas asas langsung dimusnahkan dalam susunan pengisytiharan.
  • Kelas asas maya (jika ada) dimusnahkan terakhir, dalam kedalaman songsang-dahulu, kiri-ke-kanan perintah.

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!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan