20.6 Wirtualne destruktory
Dalej: 20.7 Wielodziedziczenie
W górę: 20. Dziedziczenie i polimorfizm
Wstecz: 20.5 Klasy abstrakcyjne
20.6 Wirtualne destruktory
Aby zapewnić właściwe usuwanie obiektów, należy deklarować
destruktor
jako funkcję wirtualną, jeśli tylko mamy zamiar korzystać
z publicznego dziedziczenia z danej klasy. Wywołując wtedy
destruktor (poprzez operator
delete) obiektu klasy pochodnej
wskazywanego przez wskaźnik do klasy bazowej, wywołamy naprawdę
destruktor dla całego obiektu. Dzięki polimorfizmowi wywołany
będzie bowiem wtedy destruktor z klasy pochodnej, a destruktor
podobiektu klasy bazowej będzie potem wywołany i tak, według
normalnych zasad kolejności wywoływania destruktorów. Jak bowiem
mówiliśmy, przy usuwaniu obiektu klasy pochodnej najpierw wykonywany
jest destruktor dla części „własnej'', a potem automatycznie
wywoływany jest destruktor dla podobiektu klasy bazowej. Gdyby
destruktor nie był wirtualny, to ponieważ typem statycznym jest
wskaźnik do obiektu klasy bazowej, wywołany byłby od razu destruktor
z tej klasy, który jednak nie wie na przykład o istnieniu składowych
czy zasobów dodanych w klasie pochodnej.
W poniższym przykładzie obiekt klasy pochodnej
Pelne jest
wskazywany przez wskaźnik
osoba typu
Nazwisko*, a
więc wskaźnik do obiektu klasy bazowej
Nazwisko.
Wyszukiwarka
Podobne podstrony:
node136node132node138node138node136 YYN3RGJTIUYB5B7V76SG2CWOJ3Z3Q2BSSAGQGHInode130node13 EB3ZCAH7SPEEN2CTCJNWLAAPHAK7SBN34IUXSNYnode138 MPOLWBY7F5JRTBXYS57QFRPMNJNRLEKA6WXG3SAnode136 1node13node134node136 WDIY3HIN7ZG3NQWBCNN3XXBKEQZUQYN6VJDWQNAnode132Node13 Htmnode131więcej podobnych podstron