Zaawansowane CPP/Ćwiczenia 15: Wyjątkowo odporny kod: Różnice pomiędzy wersjami
Nie podano opisu zmian |
Nie podano opisu zmian |
||
(Nie pokazano 6 wersji utworzonych przez 2 użytkowników) | |||
Linia 1: | Linia 1: | ||
{{cwiczenie|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 | pamięci. Wypróbuj oba rozwiązania. | ||
}} | }} | ||
{{cwiczenie|2|| | {{cwiczenie|2|| | ||
Podaj przykład zasobu który może nie zostać zwolniony przez | Podaj przykład zasobu, który może nie zostać zwolniony przez | ||
system operacyjny, nawet po zakończeniu programu. | system operacyjny, nawet po zakończeniu programu. | ||
}} | }} | ||
<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> | |||
{{cwiczenie|3|| | {{cwiczenie|3|| | ||
Przeanalizuj implementację tablicy z | 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. Popraw | 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|| | |||
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. | |||
}} | }} |
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.
Ć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.