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 7 wersji utworzonych przez 2 użytkowników)
Linia 1: Linia 1:
'''Zadanie 1 '''
{{cwiczenie|1||


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


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


Podaj przykład zasobu który może nie zostać zwolniony przez
<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">
system operacyjny, nawet po zakończeniu programu.  
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>
 
{{cwiczenie|3||


'''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.