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
Mary-Kate Olsenasal
2024-11-08 06:31:02582semak imbas

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 <p>Di bawah piawaian C, adakah program ini dijamin sentiasa menghasilkan output berikut:</p>
<pre class="brush:php;toolbar:false">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:

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