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

Z Studia Informatyczne
Przejdź do nawigacjiPrzejdź do wyszukiwania
Arek (dyskusja | edycje)
Nie podano opisu zmian
 
Mirek (dyskusja | edycje)
Nie podano opisu zmian
 
(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.