Zaawansowane CPP/Ćwiczenia 14: Zarządzanie pamięcią: Różnice pomiędzy wersjami
Nie podano opisu zmian |
Nie podano opisu zmian |
||
Linia 23: | Linia 23: | ||
{{cwiczenie|3|| | {{cwiczenie|3|| | ||
W oparciu o <code><nowiki>linked_pool</nowiki></code> | W oparciu o <code><nowiki>linked_pool</nowiki></code> zaimplementuj klasę | ||
z własnymi operatorami <code><nowiki>new</nowiki></code> i <code><nowiki>delete</nowiki></code>. Zaimplementuj klasę | |||
tak, aby można było z niej dziedziczyć i w ten sposób łatwo | |||
implementować <code><nowiki>new</nowiki></code> i <code><nowiki>delete</nowiki></code> w dowolnej klasie. | |||
}} | }} | ||
<div class="mw-collapsible mw-made=collapsible mw-collapsed"><span class="mw-collapsible-toogle mw-collapsible-toogle-default style="font-variant:small-caps">Wskazówka </span><div class="mw-collapsible-content" style="display:none"> | <div class="mw-collapsible mw-made=collapsible mw-collapsed"><span class="mw-collapsible-toogle mw-collapsible-toogle-default style="font-variant:small-caps">Wskazówka </span><div class="mw-collapsible-content" style="display:none"> | ||
Zobacz implementację | Zobacz implementację zliczania elementów w [[Zaawansowane CPP/Wykład 3: Szablony II|wykładzie 3]] | ||
</div></div> | </div></div> | ||
{{cwiczenie|4|| | {{cwiczenie|4|| | ||
Przerób nieznacznie alokator podany na wykładzie, tak | Przerób nieznacznie alokator podany na wykładzie, tak | ||
aby jego funkcje wypisywały informacje o tym co robią. Użyj go z różnymi typami | aby jego funkcje wypisywały informacje o tym co robią. Użyj go z różnymi typami | ||
pojemników. Co możesz powiedzieć o sposobie przydziału pamięci dla | pojemników. Co możesz powiedzieć o sposobie przydziału pamięci dla różnych | ||
kontenerów? | kontenerów? | ||
}} | }} | ||
Linia 42: | Linia 45: | ||
Do jakich pojemników będzie można go stosować?. | Do jakich pojemników będzie można go stosować?. | ||
}} | }} | ||
Wersja z 12:25, 25 wrz 2006
Ćwiczenie 1
Przerób przykłady z wykładu.
Ćwiczenie 2
Napisz własną implementację puli pamięci opartą o listę. Zasobnik powinien być szablonem przyjmującym jako parametr typ obiektów, dla których będzie przydzielał pamięć. Wielkość puli powinna być podawana w konstruktorze. Jeśli zażądamy za dużo pamięci, to powinien zostać rzucony wyjątek std::bad_alloc. Jeśli wyczerpie się pamięć w puli, żądanie przydziału powinno rzucić std::bad_alloc:
template<typename T> linked_pool {
linked_pool(size_t n) throw(std::bad_alloc); void *allocate() throw(std::bad_alloc); /*przydziela pamięc na jeden obiekt T*/ void deallocate(void *p) throw ();
release() throw (); /*zwalnia całą pamięć z puli*/ ~linked_pool() throw() ; }
Ćwiczenie 3
W oparciu o linked_pool
zaimplementuj klasę
z własnymi operatorami new
i delete
. Zaimplementuj klasę
tak, aby można było z niej dziedziczyć i w ten sposób łatwo
implementować new
i delete
w dowolnej klasie.
Ćwiczenie 4
Przerób nieznacznie alokator podany na wykładzie, tak aby jego funkcje wypisywały informacje o tym co robią. Użyj go z różnymi typami pojemników. Co możesz powiedzieć o sposobie przydziału pamięci dla różnych kontenerów?
Ćwiczenie 5
W oparciu o linked_pool
napisz własny alokator pamięci.
Do jakich pojemników będzie można go stosować?.