Strona główna C++ C++ Hardware HTML i javascript Java Software SQL

C++ - konstruktory i destruktory kiedy są wywoływane.

Dodano: 2012-03-31

Tworząc obiekty warto wiedzieć, kiedy są i czy w ogóle są wywoływane konstruktor i destruktor. Jeżeli tworzymy statycznie obiekt (CClass cl;), to program automatycznie wywoła konstruktor, a w przypadku zakończenia działania bloku kodu zamkniętego w ciele funkcji, zostanie wywołany automatycznie destruktor.

W przypadku utworzenia wskaźnika danego typu nie prostego (CClass* cl;), bez zainicjalizowania go, nie zostanie wywołany konstruktor klasy, ani destruktor.

Po zainicjalizowaniu zmiennej wskaźnikowej (CClass* cl = new CClass();) zostanie wywołany konstruktor, należy jednak pamiętać aby wywołać destruktor (cl->~CClass();) po zakończeniu pracy na danym obiekcie lub użyć komendy delete (delete cl;) - warto użyć destruktor a następnie delete.

W przypadku klas, które dziedziczą z innych, konstruktory są wywoływane w kolejności od rodzica najstarszego do ostatniego dziecka tzn. jeżeli klasa CClass (dziecko) dziedziczy z klasy CClass2 (rodzic) to najpierw zostanie wywołany konstruktor CClass2::CClass2(); a następnie CClass::CClass(). Natomiast w przypadku wywołania destruktora kolejność jest odwrotna najpierw najmłodsze dziecko później rodzice tzn: CClass::~CClass(); CClass2::~CClass2();.

Poniżej zamieszczam program, który pokazuje w jakiej sytuacji i kolejności są wywoływane konstruktory i destruktory.