Zaawansowane CPP/Ćwiczenia 15: Wyjątkowo odporny kod: Różnice pomiędzy wersjami

Z Studia Informatyczne
Przejdź do nawigacjiPrzejdź do wyszukiwania
 
 
(Nie pokazano 8 wersji utworzonych przez 3 użytkowników)
Linia 1: Linia 1:
 +
{{cwiczenie|1||
  
''Uwaga: przekonwertowane latex2mediawiki; prawdopodobnie trzeba wprowadzi� poprawki''
+
Wykonaj podany na wykładzie przykład dotyczący alokacji zasobów w
 +
konstruktorze. Przekonaj się, że rzeczywiście prowadzi to do wycieku
 +
pamięci. Wypróbuj oba rozwiązania.
 +
}}
 +
{{cwiczenie|2|| 
  
{Wyjątkowo odporny kod}
+
Podaj przykład zasobu, który może nie zostać zwolniony przez
 
+
system operacyjny, nawet po zakończeniu programu.  
'''Zadanie 1 '''
+
}}
 
 
Wykonaj podany na wykładzie przykład dotyczący alokacji zasobów
 
konstruktorze. Przekonaj się, że rzeczywiście prowadzi to do wycieku
 
pamięci. Wypróbuj oba rozwiazania.
 
  
'''Zadanie 2 ''' 
+
<div class="mw-collapsible mw-made=collapsible mw-collapsed"><span class="mw-collapsible-toogle mw-collapsible-toogle-default style="font-variant:small-caps">Rozwiązanie</span><div class="mw-collapsible-content" style="display:none">
 +
Prostą techniką blokowania zasobu może być umieszczenie pliku
 +
<tt>lock</tt> w odpowiedniej kartotece. Jeśli program sam nie usunie tego
 +
pliku, to system tego nie zrobi.
 +
</div></div>
  
Podaj przykład zasobu który może nie zostać zwolniony przez
+
{{cwiczenie|3||
system operacyjny, nawet po zakończeniu programu.
 
  
'''Zadanie 3 '''
+
Przeanalizuj implementację tablicy z [[Zaawansowane CPP/Ćwiczenia 14: Zarz%C4%85dzanie_pami%C4%99ci%C4%85|ćwiczenia 14.4]] pod kątem
 +
odporności na wyjątki. Nie zapomnij o konstruktorach i operatorze przypisania. Napisz przykładową klasę rzucającą wyjątki i sprawdź jej działanie
 +
razem z kontenerem <tt>Tablica</tt>.
 +
}}
 +
{{cwiczenie|4||
  
Przeanalizuj implementację tablicy z zadania 14.4, pod kątem
+
Popraw implementację tak, aby w przypadku wystąpienia wyjątku tablica
odporności na wyjątki. Nie zapomnij o konstruktorach. Popraw
+
pozostawała niezmieniona. Czy da się to zapewnić bez dynamicznej
implementacje, tak aby była bezpieczna. Czy można to uzyskać bez
+
alokacji pamięci? Jeśli nie, to użyj pamięci  przydzielanej dynamicznie.
dynamicznej alokacji pamięci?
+
}}

Aktualna wersja na dzień 21:55, 26 wrz 2006

Ćwiczenie 1

Wykonaj podany na wykładzie przykład dotyczący alokacji zasobów w konstruktorze. Przekonaj się, że rzeczywiście prowadzi to do wycieku pamięci. Wypróbuj oba rozwiązania.

Ćwiczenie 2

Podaj przykład zasobu, który może nie zostać zwolniony przez system operacyjny, nawet po zakończeniu programu.

Rozwiązanie

Ćwiczenie 3

Przeanalizuj implementację tablicy z ćwiczenia 14.4 pod kątem odporności na wyjątki. Nie zapomnij o konstruktorach i operatorze przypisania. Napisz przykładową klasę rzucającą wyjątki i sprawdź jej działanie razem z kontenerem Tablica.

Ćwiczenie 4

Popraw implementację tak, aby w przypadku wystąpienia wyjątku tablica pozostawała niezmieniona. Czy da się to zapewnić bez dynamicznej alokacji pamięci? Jeśli nie, to użyj pamięci przydzielanej dynamicznie.