Rumah > pembangunan bahagian belakang > C++ > Bagaimanakah susunan permulaan dan pemusnahan objek ahli dalam agregat C ditentukan?

Bagaimanakah susunan permulaan dan pemusnahan objek ahli dalam agregat C ditentukan?

Linda Hamilton
Lepaskan: 2024-11-07 18:17:02
asal
726 orang telah melayarinya

How is the initialization and destruction order of member objects in C   aggregates determined?

Arahan Permulaan dan Pemusnahan Ahli dalam C

Dalam C , susunan objek ahli dimulakan dan dimusnahkan adalah penting untuk memahami tingkah laku struktur data yang kompleks. Mari kita pertimbangkan atur cara 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

Atur cara ini mencipta contoh struct agregat yang mengandungi tiga struct lain, A, B dan C. Apabila kita melaksanakan program ini, output berikut dihasilkan:

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

Keluaran ini menimbulkan persoalan: adakah susunan pembinaan dan pemusnahan ini dijamin oleh C standard?

Jawapannya ya. Mengikut piawaian C (12.6.2), ahli struktur agregat dimulakan dan dimusnahkan dalam susunan berikut:

  • Perintah Permulaan:

    • Pertama, kelas asas maya dimulakan mengikut susunan ia muncul dalam kelas terbitan pengisytiharan.
    • Kemudian, kelas asas langsung dimulakan mengikut tertib yang muncul dalam senarai kelas asas.
    • Akhir sekali, ahli data bukan statik dimulakan dalam susunan yang diisytiharkan dalam kelas definisi.
  • Kemusnahan Tertib:

    • Ahli data bukan statik dimusnahkan dalam susunan terbalik yang dimulakan.
    • Kelas asas langsung dimusnahkan dalam susunan terbalik yang dimulakan.
    • Kelas asas maya dimusnahkan dalam susunan yang bertentangan dimulakan.

Oleh itu, untuk program yang diberikan, susunan pembinaan dan pemusnahan ahli adalah dijamin:

  1. Permulaan: A:: A, B::B, C::C
  2. Kemusnahan: C::~, B::~, A::~

Ini menjamin tingkah laku yang konsisten apabila mencipta dan memusnahkan struktur data yang kompleks dalam C .

Atas ialah kandungan terperinci Bagaimanakah susunan permulaan dan pemusnahan objek ahli dalam agregat C ditentukan?. 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