ALG3

ALG3



5.1 Listy jednokierunkowe 103

noprawny obiekt - może aktywować dowolną metodę swojej klasy, czyli przykładowo sprawdzić swoją zawartość przy pomocy funkcji wypisz.

Przy okazji omawiania operatora dekrementaeji spójrzmy jeszcze na inne jego zastosowanie. W definicji klasy został zawarty jej destruktor. Przypomnijmy, że destruktor jest specjalną funkcją wywoływaną automatycznie podczas niszczenia obiektu. To niszczenie może być bezpośrednie, np. za pomocą operatora delete:

T.TSTA *p=new LISTA; II tworzymy nowy obiekt... delete p;    II ... i niszczymy go!

lub też pośrednie, w momencie gdy obiekt przestaje być dostępny. Przykładem tej drugiej sytuacji niech będzie następujący fragment programu:

if (warunek)


(

LISTA p; I


II tworzymy obiekt lokalny // widoczny tylko w tej instrukcji


if


Obiekt p zadeklarowany w ciele instrukcji //jest dla niej całkowicie lokalny. Żaden inny fragment programu nie ma prawa dostępu do niego. Z takim tymczasowym obiektem wiąże się czasem dość sporo pamięci zarezerwowanej tylko dla niego. Otóż, gdyby nie było destruktora, programista nie miałby wcale pewności, czy ta pamięć została w' całości zwrócona systemowo operacyjnemu. Celowo podkreślam, że w' całości, bowiem automatyczne zwalnianie pamięci jest możliwe tylko w przypadku tych zmiennych, które są z założenia lokowane na stosie. Dotyczy to np. zwykłych pól obiektu, ale nie jest możliwe w przypadku struktur dynamicznych, które są nierzadko „rozsiane” po dość sporym obszarze pamięci komputera, l ak jest w przy padku list. drzew, tablic dynamicznych etc. W takim przypadku programista musi sam napisać jawny destruktor, kloty znając1 doskonale sposób, w jaki pamięć została przydzielona obiektowi, będzie ją umiał prawidłowa zwrócić.

Tak też się dzieje w naszym przykładzie. Destruktor ma zaskakująco prostą budowę:

-LISTA()    ( while (!pusta O) (*this)—; }

Jest to zwykła pętla while, która tak długo usuwa elementy z listy, aż stanie się ona pusta. Mimo tego, iż nic jest to optymalny sposób na zwolnienie pamięci, został jednak zastosowany w celu ukazania możliwych zastosowań wskaźnika this, który - jak wiemy - wskazuje na „własny” obiekt. Linia (*this)— oznacza

1

De facto to my go znamy i dzielimy się tą cenną wiedzą z destruktorem... Rozsiane tu i ówdzie personifikacje są nie do uniknięcia w tego typu opisach!


Wyszukiwarka

Podobne podstrony:
ALG3 5.1 Listy jednokierunkowe 113 int wzor(int x,int(*fun)(int!) [ return fun(x); ) void main(} i
ALG 5 5.1 Listy jednokierunkowe 95 w tej książce dla uproszczenia operuje się głównie wartościami ty
ALG 7 5.1. Listy jednokierunkowe 97 public: int pusta()    // czy lista jest pusta? {
ALG 9 5.1. Listy jednokierunkowe 99 stawałby się on wówczas automatycznie głową listy i musiałby zos
ALG1 5.1 Listy jednokierunkowe 101 5.1 Listy jednokierunkowe 101 ELEMENT Aprzed=NULL,*po=inf.głowa;
ALG5 5.1 Listy jednokierunkowe 105 Na rysunku 5-7 możemy przykładowo prześledzić jak powinna być wy
ALG7 5.1. Listy jednokierunkowe 107 cout « "L2 = for (i=0; i<n; 12.dorzuc2(tab2[i++])) ; 12
ALG9 5,1. Listy jednokierunkowe 109 Poruszony powyżej problem był na tyle charakterystyczny dla wie
ALG1 5.1. Listy jednokierunkowe 111 i zarobków. (Rozbudowa tych struktur danych nie wniosłaby konce
ALG5 5.1. Listy jednokierunkowe 115 I res->gIowa=przed; res->oqon=pos; return (ras) ; } 1 •
ALG7 5.1. Listy jednokierunkowe 117 Mając już komplet funkcji pusta, zestaw funkcji decyzyjnych i u
ALG9 5.1. Listy jednokierunkowe 119 wartość zwracaną przez funkcję: w normalnej sytuacji winien to
ALG1 5.1 Listy jednokierunkowe 121 } cout << "

ALG 4 94 Rozdział 5. Struktury danych5.1. Listy jednokierunkowe Lista jednokierunkowa jest oszczędną
ALG8 108__Rozdział 5. Struktury danych5.1.3.Listy jednokierunkowe - teoria i rzeczywistość Oprócz p
ALG7 5.2. Tablicowa implementacja list 1275.2.3.Listy innych typów Listy jednokierunkowe są bardzo
img213 (11.30) gdzie a oznacza przyjęty poziom istotności. Przy takim postępowaniu rozważany obiekt
Rys. 8. Wybór grubości linii Intensywność zacieniowania obiektów może być rozpatrywana jako

więcej podobnych podstron