Pakiet programów do zdalnego nauczania Programowania Orientowanego Obiektowo
Dzisiaj jest
Poniedziałek, 16 Lipiec 2018
Zarejestrowanych użytkowników: 4
Dostępnych pytań testowych: 102
HOME
Strona tytułowa pracy dyplomowej
NAUKA
Materiały dydaktyczne związane z OOP
TESTY
Sprawdzenie poziomu zdobytej wiedzy
ZASOBY
Literatura i zasoby sieciowe o OOP
ŹRÓDŁA
Zbiór projektów dydaktycznych z OOP
KONTO
Możliwość śledzenia własnych postępów
INFO



Własność obiektów zawieranych

W językach, które nie dysponują mechanizmem automatycznego odśmiecania nieużytków (tak jest w C++) należałoby zastanowić się nad kwestią zwalniania pamięci przez obiekt kompozytowy. Do tej pory w programie przykładowym obiekty były niszczone podczas wywołań odlaczUrzadzenie() i w destruktorze kompozytów. Może zdarzyć się jednak sytuacja, że obiekty zawierane są również częścią innych klas (np. SprzetKomputerowy). W takim wypadku kompozyt nie może niszczyć przekazanych mu obiektów.

Należy więc starannie zastanowić nad polityką zwalniania pamięci. Dobrym rozwiązaniem może okazać się zmiana wartość zwracanej metody odlaczUrzadzenie() z void na UrzadzenieUSB * (oraz zmiana ciała metody uwzględniająca usunięcie operatora delete), dzięki czemu użytkownik zawsze dostanie wskaźnik który samodzielnie będzie mógł zwrócić.

Jeżeli chodzi o destruktory sytuacja jest nieco bardziej kłopotliwa:

  • można zwracać pamięć obiektów w destruktorach, a tylko te obiekty które zostały jawnie przez klienta odłączone powinny być zwracane przez niego,
  • destruktory nie wywołują w ogóle operatora delete na swoich potomkach, np. w sytuacji gdzie wewnętrzne obiekty są współdzielone przez wiele klas. W takim wypadku należy dokładnie określić kogo obowiązkiem jest zwrócenie pamięci.
Adamik Łukasz, Politechnika Śląska w Gliwicach (AEiI) - 2010/11