node132






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:
node136
node132
node138
node138
node136 YYN3RGJTIUYB5B7V76SG2CWOJ3Z3Q2BSSAGQGHI
node130
node13 EB3ZCAH7SPEEN2CTCJNWLAAPHAK7SBN34IUXSNY
node138 MPOLWBY7F5JRTBXYS57QFRPMNJNRLEKA6WXG3SA
node136 1
node13
node134
node136 WDIY3HIN7ZG3NQWBCNN3XXBKEQZUQYN6VJDWQNA
node132
Node13 Htm
node131

więcej podobnych podstron