124

124



W kodzie poprawionym destruktor klasy baza2 jest wirtualny. Wykonanie fragmentu „Po” spowoduje wywołanie destruktorów obu klas, zarówno klasy Pochodna2, jak i klasy baza2.

Moglibyśmy się kłócić, że podany fragment kodu jest przekombinowany. Naprawdę tak nie jest. Często funkcje pobierają wskaźniki do klas podstawowych i wykonują odpowiednie operacje za pomocą funkcji wirtualnych. Rozwiązanie to pozwala utworzyć ogólne funkcje obsługujące wiele różnych klas pochodnych. Funkcje takie mogą wywoływać instrukcję delete, a w takim wypadku zauważymy opisany przed chwilą problem. Rozważmy następujący kod:

Pochodna2 *pd2;

baza2 *pdb;

pd2 = new Pochodna2;

Przetwarzaj (pd2);

void Przetwarzaj (baza2 *pbaza2)

{

//wykonać tutaj jakieś operacje delete pbaza2;

}

Pokazany kod wydaje się zupełnie niewinny. Oglądając go, mogliśmy nawet nie zauważyć rzutowania zmiennej i kryjącego się w nim niebezpieczeństwa.

Podsumowując, jeśli destruktor nie jest wirtualny, to zostanie wywołany destruktor klasy podstawowej, ale nie destruktor klasy pochodnej. A wtedy może stać się coś niedobrego.

Przykład: TestVirtualDTor() w pliku inherit.cpp

Jawne określanie używanego konstruktora w wypadku utworzenia kilku konstruktorów

unikanie nieoczekiwanych wyników

Przed

class Pochodnal : public bazal

{

public:

Pochodnal (Pochodnal &pochodna1)

{

cout « "konstruktor kopiowania Pochodnal \n";

}


Wyszukiwarka

Podobne podstrony:
4.2 Pytania sprawdzające Warunkiem wykonania poprawnie ćwiczeń przez ucznia jest zapoznanie z materi
Ćwiczenie 2. Definicja prostej klasy.Obserwacja konstruktorów i destruktorów . Celem ćwiczenia jest
30 (40) 60 liczniki TO, Tl Warunkiem poprawnego działania jest tu wykonanie rozkazu ORL, gdy zawarto
6. Tolerowanie i pasowanie6.1 Pytania sprawdzające Warunkiem wykonania poprawnie ćwiczeń przez uczni
golf0 Jazda ekonomiczna Od strony technicznej samochód jest przez wykonanie doskonale przygotowany
image0 jpeg «•* r.ak. 2004/2005    3.03.2005EGZAMIN POPRAWKOWY Z TEORII STEROWANIA1.
Image275 w kodzie 8421, a liczącej w kodzie 5421. Dekada ta przystosowana jest do asynchronicznego ł
img111 (3) NORMOWANIE CZASU PRACY Czas uzupełniający przeznaczony jest na wykonanie czynności obsług
img152 152 a więc błąd kwantowania próbki (wynikający z kwantowania poprawek predykcji) wynosi (1.4.
IMG201206071 IIIPJfj Stwierdzeń dotyczących przepony jest poprawne ? I. Najsilniejszą częścią przep
atakuje człowieka. Trzeba ją poprawiać. Drogą do tego jest wierna rzeczywistości filozofia i oparta

więcej podobnych podstron