raybones napisał(a)
wlasnie dzis czytalem, ze w wypadku stosowania wskaznikow powstaje problem podczas wyrzucania wyjatkow, bo kompilator sam nie zwolni obszaru ktory one wskazuja, i wowczas zaleca sie opakowanie wskaznikow w klase i przeciazenie operatorow & oraz *, co daje gwarancje ze jakkolwiek wystapi wyjatek, tak wskaznik opakowany w klase z pewnoscia zostanie zwolniony razem z obszarem ktory zajmuje.
Jeżeli chodzi o jeden wskaźnik to sam pomysł jest OK, tak samo jak pomysł z trzymaniem wektora wskaźników ALE w implementacji musi nastąpić przekazanie odpowiedzialności za wskaźnik... W przypadku pojedynczego wskaźnika wymyślono klasę
auto_ptr
, która jest w STL i wtedy wskaźnik JEST bezpieczny, gdyż nastąpi dealokacja obiektu w trakcie destrukcji obiektu auto_ptr. Dla tablic OBIEKTÓW wymyślono vector
, który też jest opakowaniem na wskaźnik (do bufora). Cały problem polega właśnie na przekazywaniu odpowiedzialności, bo jeśli chce mieć wektor wskaźników to w sytuacji przedstawionej przeze mnie powyżej przekazuję wskaźnik ale nie-opakowany i to jest miejsce bardzo wrażliwe, dlatego w przypadku wyjątku tracimy kontrolę nad wskaźnikiem, uff :) Po prostu ze wskaźnikami są większe problemy niż się przeważnie sądzi, szczególnie w środowisku, gdzie są wyjątki.
Rozwiązaniem tablicy wskaźników jest właśnie
```cpp
auto_vector
z Relisoft
raybones napisał(a)
a poza tym, czyz nie po to zostal stworzony dodatkowy blok uzupelniajacy do try -catch - mam na mysli oczywiscie finally ? jesli taki blok zastosujemy chocby w main (rzecz jasna ze sami wybierzemy wlasciwe miejsce) to czy nie zagwarantujemy sobie ze ten caly wczesniej utworzony zasob zostanie zwolniony?
To nie jest standard. Musiałbyś i tak KAŻDY alokowany obiekt obsługiwać...
-> http://www.research.att.com/~bs/bs_faq2.html#finally
raybones napisał(a)
p.s. polecona lekture oczywiscie przerobie - tylko ciekawe z jakim skutkiem ;)
Cały ten site (relisoft.com) jest naprawdę wart polecenia :)