Bei der Konstruktion von Objekten gibt es eine exakt definierte Reihenfolge, in der die Konstruktoren der Basisklassen und der Elemente aufgerufen werden. Gegeben sei folgende Klassendeklaration
class A : public B, public C, public D { public: A() : C(45), b(5.3) {}; protected: int a; double b; public: char c; };Die Aufrufreihenfolge ist dann wie folgt:
B()
->C()
->D()
)
int()
->double()
->char()
).
A()
)
Der Aufruf der Konstruktoren der Basisklasse C
und des
double
-Konstruktors mit expliziten Parametern ändert nichts an dieser
Reihenfolge.
Die Destruktoren werden später in umgekehrter Reihenfolge aufgerufen.
Ausnahme von dieser Regel sind die sogenannten virtuellen Basisklassen. Existiert eine direkte virtuelle Basisklasse (d.h. eine direkte Basisklasse ist virtuell) oder virtuelle Basisklassen einer direkten oder indirekten Basisklasse, so werden deren Konstruktoren zuerst aufgerufen. Erst danach geht es in der oben beschriebenen Reihenfolge weiter.