Poznaj C++ w$ godziny0149

Poznaj C++ w$ godziny0149



138 Godzina 9

Widać tutaj analogię z telefonem. Możesz zaprogramować swój telefon tak, aby pamiętał wiele numerów. Wystarczy nacisnąć przycisk (wskaźnik) aby zadzwonić do wybranej osoby. Nie musisz pamiętać numeru telefonu (czyli jakby adresu w pamięci) ani miejsca, w którym znajduje się dany telefon (obszar w pamięci). Podobnie jest z danymi na stercie. Nie musisz wiedzieć gdzie one faktycznie w pamięci są, wystarczy Ci wskaźnik.

Stos, w momencie wyjścia z funkcji, jest automatycznie czyszczony. Wszystkie zmienne lokalne są wyrzucane z pamięci. Dane na stercie trwają aż do zakończenia programu. Jest możliwość zwolnienia zarezerwowanej pamięci, jeśli nie jest ona już potrzebna.

Zaletą sterty, jest fakt, że pamięć w niej zarezerwowana jest dostępna tak długo, aż sam jej bezpośrednio nie zwolnisz. Jeśli zarezerwujesz pamięć na stercie wewnątrz funkcji to po zakończeniu funkcji, będzie ona nadal zarezerwowana.

Zaletą takiego dostępu do pamięci w stosunku do wykorzystywania zmiennych globalnych jest możliwość dostępu tylko przez te funkcje, które mają dostęp do wskaźnika danego obszaru. Gwarantuje to spójność dostępu do danych i eliminuje problem niepożądanej modyfikacji danych przez niepowołane do tego funkcje.

Aby móc wykorzystywać pamięć na stercie musisz mieć możliwość stworzenia wskaźnika do obszaru na stercie i przekazania tego wskaźnika do wybranych funkcji. W dalszym ciągu rozdziału opiszemy jak to zrobić.

new

Do alokacji (rezerwacji) pamięci służy w C++ słowo kluczowe new. Następuje po nim nazwa typu obiektu dla którego rezerwujemy pamięć. Dzięki temu kompilator wie, ile pamięci ma zarezerwować. Dlatego new unsigned short int zarezerwuje 2 bajty na stercie, natomiast new long zarezerwuje 4 bajty.

Wartością zwracaną przez new jest adres w pamięci. Musi on być przypisany do wskaźnika. Żeby stworzyć na stercie miejsce dla zmiennej unsigned short int możesz napisać tak:

unsigned short int * pWskaznik; pWskaznik = new unsigned short int;

Oczywiście można tę operację zapisać krócej:

unsigned short int * pWskaznik = new unsigned short int;

W obu przypadkach, pWskaznik wskazuje na stercie na wartość typu unsigned short int. Możesz ten wskaźnik wykorzystywać dokładnie tak, jak wskaźnik na zmienną i dowolnie przypisywać wartości do pamięci:

*pWskaznik = 72;

Oznacza to: „Wstaw 72 pod adres wskazywany przez pWskaznik” albo „Przypisz 72

do obszaru wskazywanego przez pWskaznik”.

Widać tutaj analogię z telefonem. Możesz zaprogramować swój telefon tak, aby pamiętał wiele numerów. Wystarczy nacisnąć przycisk (wskaźnik) aby zadzwonić do wybranej osoby. Nie musisz pamiętać numeru telefonu (czyli jakby adresu w pamięci) ani miejsca, w którym znajduje się dany telefon (obszar w pamięci). Podobnie jest z danymi na stercie. Nie musisz wiedzieć gdzie one faktycznie w pamięci są, wystarczy Ci wskaźnik.

Stos, w momencie wyjścia z funkcji, jest automatycznie czyszczony. Wszystkie zmienne lokalne są wyrzucane z pamięci. Dane na stercie trwają aż do zakończenia programu. Jest możliwość zwolnienia zarezerwowanej pamięci, jeśli nie jest ona już potrzebna.

Zaletą sterty, jest fakt, że pamięć w niej zarezerwowana jest dostępna tak długo, aż sam jej bezpośrednio nie zwolnisz. Jeśli zarezerwujesz pamięć na stercie wewnątrz funkcji to po zakończeniu funkcji, będzie ona nadal zarezerwowana.

Zaletą takiego dostępu do pamięci w stosunku do wykorzystywania zmiennych globalnych jest możliwość dostępu tylko przez te funkcje, które mają dostęp do wskaźnika danego obszaru. Gwarantuje to spójność dostępu do danych i eliminuje problem niepożądanej modyfikacji danych przez niepowołane do tego funkcje.

Aby móc wykorzystywać pamięć na stercie musisz mieć możliwość stworzenia wskaźnika do obszaru na stercie i przekazania tego wskaźnika do wybranych funkcji. W dalszym ciągu rozdziału opiszemy jak to zrobić.

new

Do alokacji (rezerwacji) pamięci służy w C++ słowo kluczowe new. Następuje po nim nazwa typu obiektu dla którego rezerwujemy pamięć. Dzięki temu kompilator wie, ile pamięci ma zarezerwować. Dlatego new unsigned short int zarezerwuje 2 bajty na stercie, natomiast new long zarezerwuje 4 bajty.

Wartością zwracaną przez new jest adres w pamięci. Musi on być przypisany do wskaźnika. Żeby stworzyć na stercie miejsce dla zmiennej unsigned short int możesz napisać tak:

unsigned short int * pWskaznik; pWskaznik = new unsigned short int;

Oczywiście można tę operację zapisać krócej:

unsigned short int * pWskaznik = new unsigned short int;

W obu przypadkach, pWskaznik wskazuje na stercie na wartość typu unsigned short int. Możesz ten wskaźnik wykorzystywać dokładnie tak, jak wskaźnik na zmienną i dowolnie przypisywać wartości do pamięci:

‘pWskaznik = 72;

Oznacza to: „Wstaw 72 pod adres wskazywany przez pWskaznik" albo „Przypisz 72 do obszaru wskazywanego przez pWskaznik".


Wyszukiwarka

Podobne podstrony:
Poznaj C++ w$ godziny0179 168 Godzina 12 Występuje tutaj jeszcze jeden, dodatkowy koszt. Każda kopia
Poznaj C++ w$ godziny0181 170 Godzina 12 wyrzucany z pamięci poprzez wywołanie destruktora. Widać to
Poznaj C++ w$ godziny0213 204 Godzina 14 przez wskaźniki zawarte w obiekcie oryginalnym. Widać to by
IMGV34 Data i/**State Godzina Imle I nazwisko Firma Telefon / adres > stolika ż.ęftr M Jfnft’- /
Poznaj C++ w$ godziny0001 Gdy masz czas tylko na właściwe rozwiązania... Intersoftlcind Gdy masz cza
Poznaj C++ w$ godziny0002 Jesse LibertyC++w 2 4 godziny Tłumaczenie: Grzegorz MichałekInlersofllond
Poznaj C++ w$ godziny0003 Tytuł oryginału: Teach Yourself C++ in 24 Hours, Second Edition Tłumaczeni
Poznaj C++ w$ godziny0004 Spis rozdziałów Część 1 Wstęp do C++ 1 1 Zaczynamy 3 2 Program w C++ 1
Poznaj C++ w$ godziny0005 Część VI Tematy specjalne 293 20 Specjalne klasy i
Poznaj C++ w$ godziny0006 Spis treści Część I Wstęp do C++    1 1    Z
Poznaj C++ w$ godziny0007 VI Poznaj C++ w 24 godziny Przypisywanie wartości do zmiennych
Poznaj C++ w$ godziny0008 Spis treści    vii Zmienne
Poznaj C++ w$ godziny0009 viii Poznaj C++ w 24 godziny 8    Zaawansowane sterowanie p
Poznaj C++ w$ godziny0010 Spis treści    ix 11    Referencje
Poznaj C++ w$ godziny0011 X Poznaj C++ w 24 godziny Ograniczenia przy przeciążaniu operatorów
Poznaj C++ w$ godziny0012 Spis treści    xi Przejścia niedozwolone
Poznaj C++ w$ godziny0013 XII Poznaj C++ w 24 godziny 21    Preprocesor .............
Poznaj C++ w$ godziny0014 Spis treści xiii Interfejs aplikacji
Poznaj C++ w$ godziny0015 XIV Poznaj C++ w 24 godziny Część VIII Dodatki    407 A &nb

więcej podobnych podstron