144 Godzina 10
Kiedy wywołasz delete na wskaźniku do obiektu klasy znajdującego się na stercie, to przed zwolnieniem pamięci zajmowanej przez obiekt zostanie wywołany destruktor klasy, której jest dany obiekt. Dzięki temu klasa ma np. możliwość zwolnienia dodatkowo zarezerwowanej pamięci tak, jak jest to robione podczas usuwania obiektów ze stosu w momencie wyjścia z funkcji. Listing 10.1 ilustruje tworzenie i usuwanie obiektów ze sterty.
1:
2:
3:
4:
6:
8:
9:
10
11
12
13
14
15
16
17
18
19
20 21
23
24
25
26 28
29
30
31
32
33
34
35
36
// Listing 10.1
// Tworzenie i usuwanie obiektów ze sterty
#include <iostream.h>5: class ZwyklyKot7: { public:
ZwyklyKot() ;
~ZwyklyKot() ; private:
int jegoWiek;
>;
ZwyklyKot: : ZwyklyKot ()
cout « "Wywołanie konstruktora.\n";
jegoWiek = 1;
}
ZwyklyKot::-ZwyklyKot()22: {
cout « "Wywołanie destruktora.\n";
int main()27: {
cout « "ZwyklyKot Frisky...\n";
ZwyklyKot Frisky;
cout « "ZwyklyKot *pRags = new ZwyklyKot...\n”; ZwyklyKot * pRags = new ZwyklyKot; cout « "delete pRags...\n"; delete pRags;
cout « "Wyjście, Frisky odchodzi...\n"; return 0;
>
ZwyklyKot Frisky...
Wywołanie konstruktora.
ZwyklyKot * pRags = new ZwyklyKot... Wywołanie konstruktora, delete pRags...
Wywołanie destruktora.
Wyjście, Frisky odchodzi...
Wywołanie destruktora.
Kiedy wywołasz delete na wskaźniku do obiektu klasy znajdującego się na stercie, to przed zwolnieniem pamięci zajmowanej przez obiekt zostanie wywołany destruktor klasy, której jest dany obiekt. Dzięki temu klasa ma np. możliwość zwolnienia dodatkowo zarezerwowanej pamięci tak, jak jest to robione podczas usuwania obiektów ze stosu w momencie wyjścia z funkcji. Listing 10.1 ilustruje tworzenie i usuwanie obiektów ze sterty.
1: // Listing 10.1
2: II Tworzenie i usuwanie obiektów ze sterty
3:
4: #include <iostream.h>5:
6: class ZwyklyKot7: (
8: public:
9: Zwykły Kot() 1
10: -ZwyklyKotO;
11: private:
12: int jegoWiek;
14:
15: ZwyklyKot::ZwyklyKot()
17: cout « "Wywołanie konstruktora.\n";
18: jegoWiek = 1;
20:
21: ZwyklyKot::-ZwyklyKot()22: {
23: cout « "Wywołanie destruktora.\n";
25:
28: cout « "ZwyklyKot Frisky...\n”;
29: ZwyklyKot Frisky;
30: cout « "ZwyklyKot *pRags = new ZwyklyKot...\n”;
31: ZwyklyKot * pRags = new ZwyklyKot;
32: cout « "delete pRags...\n";
33: delete pRags;
34: cout « "Wyjście, Frisky odchodzi...\n";
35: return 0;
36: )
ZwyklyKot Frisky...
Wywołanie konstruktora.
ZwyklyKot * pRags = new ZwyklyKot... Wywołanie konstruktora, delete pRags...
Wywołanie destruktora.
Wyjście, Frisky odchodzi... Wywołanie destruktora.