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
Linda Hamiltonasal
2024-11-07 18:17:02707semak imbas

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;
}

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::~

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:
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