Heim >Backend-Entwicklung >C++ >Wie ist die Reihenfolge von Konstruktion und Zerstörung bei der C-Vererbung?

Wie ist die Reihenfolge von Konstruktion und Zerstörung bei der C-Vererbung?

DDD
DDDOriginal
2024-11-29 12:04:11696Durchsuche

What's the Order of Construction and Destruction in C   Inheritance?

Reihenfolge von Aufbau und Zerstörung bei der Vererbung

Beachten Sie die folgende Klassenhierarchie:

struct A {
    A() { std::cout << "A() C-tor" << std::endl; }
    ~A() { std::cout << "~A() D-tor" << std::endl; }
};

struct B : public A {
    B() { std::cout << "B() C-tor" << std::endl; }
    ~B() { std::cout << "~B() D-tor" << std::endl; }

    A a;
};

Wenn eine Instanz von B wird erstellt (wie in int main() { B b; }), die Konstruktions- und Zerstörungsreihenfolge folgt spezifisch Regeln:

Konstruktionsreihenfolge:

  1. Basisklassenkonstruktor: Der Konstruktor der Basisklasse (A) wird zuerst aufgerufen.
  2. Mitgliederfeldkonstruktion: Die Mitgliedsfelder der abgeleiteten Klasse (B) werden in der Reihenfolge erstellt, in der sie erstellt werden werden deklariert. In diesem Fall wird die Instanz a der Klasse A konstruiert.
  3. Abgeleiteter Klassenkonstruktor: Schließlich wird der Konstruktor der abgeleiteten Klasse (B) aufgerufen.

Dies bedeutet den folgenden Aufruf Reihenfolge:

  • A()
  • A(a)
  • B()

Vernichtungsreihenfolge:

  1. Abgeleiteter Klassendestruktor: Der Destruktor der abgeleiteten Klasse (B) wird zuerst aufgerufen.
  2. Mitgliedfeldzerstörung: Die Mitgliedsfelder der abgeleiteten Klasse werden in der umgekehrten Reihenfolge zerstört, in der sie erstellt wurden. In diesem Fall wird die Instanz a der Klasse A zerstört.
  3. Basisklassen-Destruktor: Abschließend wird der Destruktor der Basisklasse (A) aufgerufen.

Dies führt zu folgender Zerstörung Reihenfolge:

  • ~B()
  • ~A(a)
  • ~A()

Daher die Baureihenfolge beginnt mit der Basisklasse, fährt mit den Mitgliedsfeldern fort und endet mit der abgeleiteten Klasse. Die Zerstörungsreihenfolge ist die Umkehrung der Baureihenfolge.

Das obige ist der detaillierte Inhalt vonWie ist die Reihenfolge von Konstruktion und Zerstörung bei der C-Vererbung?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn