Poznaj C++ w$ godziny0189

Poznaj C++ w$ godziny0189



178 Godzina 12

problem. Do jakiego obiektu odnosi się rKot po wykonaniu linii 31? Jak już mówiliśmy, referencja musi odnosić się do istniejącego obiektu. Jeśli jest inaczej (obiekt jest nuli) to program jest nieprawidłowo napisany.

178 Godzina 12


Program, w którym pojawiają się referencje do pustych obiektów będzie się kompilował, ale jego działanie jest nieprzewidywalne.


Istnieją trzy rozwiązania tego problemu. Pierwsze polega na zadeklarowaniu w linii 25 obiektu klasy ZwyklyKot i zwrócenie go z funkcji Funkcja () przez wartość. Drugie idzie dalej i polega na zadeklarowaniu w funkcji Funkcja () obiektu klasy ZwyklyKot na stercie i zwróceniu wskaźnika do tego obiektu. Funkcja wywołująca będzie wtedy miała możliwość skasowania wskaźnika.

Trzecie, najbardziej eleganckie, polega na zadeklarowaniu obiektu w funkcji wywołującej i przekazaniu go do funkcji Funkcja () przez referencje.

Wskaźnik, gdzie się podział wskaźnik?

Kiedy wykonujesz operację rezerwacji pamięci na stercie, jako wynik otrzymujesz wskaźnik do zarezerwowanego obszaru (lub wartość nuli). Niezbędnym jest zapamiętanie takiego wskaźnika w celu późniejszego zwolnienia pamięci.

Podczas przekazywania takiego obszaru z jednej funkcji do drugiej zawsze któraś musi posiadać jego wskaźnik. Zazwyczaj wartości w obszarze są przekazywane przez referencje, a kasowaniem zarezerwowanego bloku najczęściej zajmuje się funkcja, w której go zarezerwowano.

Niebezpieczeństwo pojawia się wtedy, gdy jedna funkcja rezerwuje pamięć, a inna ją zwalnia. Niejednoznaczność „przynależności” wskaźnika może spowodować dwa problemy: pozostawienie w pamięci zarezerwowanego obszaru albo druga skrajność, próbę dwukrotnego zwolnienia zarezerwowanego bloku. Obie sytuacje mogą przysporzyć wiele problemów. Bezpiecznie jest umieszczać rezerwowanie i zwalnianie bloku w jednej funkcji.

Jeśli piszesz funkcję, która musi rezerwować pamięć i przekazywać ją z powrotem do funkcji wywołującej to postaraj się to zmienić. Niech funkcja wywołująca rezerwuje niezbędną pamięć i przekazuje ją do wywoływanej funkcji przez referencje. Ten dobry, programistyczny zwyczaj pozwala na przesunięcie zarządzania pamięcią poza program, do funkcji wywołującej, która jednocześnie będzie miała możliwość zwolnienia zarezerwowanego obszaru.

problem. Do jakiego obiektu odnosi się rKot po wykonaniu linii 31? Jak już mówiliśmy, referencja musi odnosić się do istniejącego obiektu. Jeśli jest inaczej (obiekt jest nuli) to program jest nieprawidłowo napisany.

, Z.

a “V    Program, w którym pojawiają się referencje do pustych obiektów

((O ■>))' będzie się kompilował, ale jego działanie jest nieprzewidywalne.

Istnieją trzy rozwiązania tego problemu. Pierwsze polega na zadeklarowaniu w linii 25 obiektu klasy ZwyklyKot i zwrócenie go z funkcji Funkcja() przez wartość. Drugie idzie dalej i polega na zadeklarowaniu w funkcji Funkcja () obiektu klasy ZwyklyKot na stercie i zwróceniu wskaźnika do tego obiektu. Funkcja wywołująca będzie wtedy miała możliwość skasowania wskaźnika.

Trzecie, najbardziej eleganckie, polega na zadeklarowaniu obiektu w funkcji wywołującej i przekazaniu go do funkcji Funkcja () przez referencje.

Wskaźnik, gdzie się podział wskaźnik?

Kiedy wykonujesz operację rezerwacji pamięci na stercie, jako wynik otrzymujesz wskaźnik do zarezerwowanego obszaru (lub wartość nuli). Niezbędnym jest zapamiętanie takiego wskaźnika w celu późniejszego zwolnienia pamięci.

Podczas przekazywania takiego obszaru z jednej funkcji do drugiej zawsze któraś musi posiadać jego wskaźnik. Zazwyczaj wartości w obszarze są przekazywane przez referencje, a kasowaniem zarezerwowanego bloku najczęściej zajmuje się funkcja, w której go zarezerwowano.

Niebezpieczeństwo pojawia się wtedy, gdy jedna funkcja rezerwuje pamięć, a inna ją zwalnia. Niejednoznaczność „przynależności” wskaźnika może spowodować dwa problemy: pozostawienie w pamięci zarezerwowanego obszaru albo druga skrajność, próbę dwukrotnego zwolnienia zarezerwowanego bloku. Obie sytuacje mogą przysporzyć wiele problemów. Bezpiecznie jest umieszczać rezerwowanie i zwalnianie bloku w jednej funkcji.

Jeśli piszesz funkcję, która musi rezerwować pamięć i przekazywać ją z powrotem do funkcji wywołującej to postaraj się to zmienić. Niech funkcja wywołująca rezerwuje niezbędną pamięć i przekazuje ją do wywoływanej funkcji przez referencje. Ten dobry, programistyczny zwyczaj pozwala na przesunięcie zarządzania pamięcią poza program, do funkcji wywołującej, która jednocześnie będzie miała możliwość zwolnienia zarezerwowanego obszaru.


Wyszukiwarka

Podobne podstrony:
Poznaj C++ w$ godziny0018 Część IWstęp do C++ VGodzina 1    Zaczynamy 2   &
Poznaj C++ w$ godziny0028 12 Godzina 1 Przepisz program dokładnie. Pamiętaj o wszystkich znakach. Np
Poznaj C++ w$ godziny0142 Wskaźniki 131Przypisywanie adresu do wskaźnika Jak już mówiliśmy, każda zm
Poznaj C++ w$ godziny0230 Tablice 221Wskaźnik do tablicy a tablica wskaźników Rozpatrzmy trzy różne
Poznaj C++ w$ godziny0043 Zmienne i stałe 27Definiowanie zmiennych Zmienne tworzy się i definiuje si
47994 str8 9 Uprzednio, co najmniej na pół godziny przed dodaniem do mleka, podpuszczkę rozpuszcza
Poznaj C++ w$ godziny0253 Dziedziczenie 245 Dziedziczenie 245 destruktor Psa. . destruktor Ssaka des
scandjvutmp16301 346 niej staje się bożkiem; do jakiego/, to stopnia dochodzi wtedy złudzenie i sza
fia1 12.23. Do obwodu przedstawionego na rysunku 105 dołączono szeregowo zwojnicę o indukcyjności L
fia1 12.23. Do obwodu przedstawionego na rysunku 105 dołączono szeregowo zwojnicę o indukcyjności L
178 179 (2) 178 ODPOWIEDZI 12:    T. Litery każdej kolejnej pary znajdują się w
178 179 (2) 178 ODPOWIEDZI 12:    T. Litery każdej kolejnej pary znajdują się w
DSCF8507 I Stosując marketing w odniesieniu do
skanuj0019 (94) *1 to już analogiczne do współczesnych ufnall. Wydaje się. że po raz pierwszy wprowa
1.2.2.1. Kamery cyfrowe W fotogrametrii cyfrowej, do „fotografowania” obiektów wykorzystuje się
skanuj0019 (171) dadaiści do swoich wynalazków odnosili się z identyczną nonszalancją jak do tradycy

więcej podobnych podstron