Różnice między wybraną wersją a wersją aktualną.
Last revision Both sides next revision | |||
wlasne_funkcje_obslugi_braku_pamieci [2008/12/03 22:24] marcinkaczor utworzono |
wlasne_funkcje_obslugi_braku_pamieci [2008/12/03 22:32] marcinkaczor formatowanie |
||
---|---|---|---|
Linia 1: | Linia 1: | ||
- | /*! | + | === Własne funkcje obsługi braku pamięci === |
- | * Autor: Marcin Kaczor U3ISI nr albumu: 192641 | + | |
- | * Temat: Obsluga braku pamieci (praca domowa na ZPR) | + | ==Marcin Kaczor U3ISI nr albumu: 192641 == |
- | * | + | |
- | * Problem: Podczas korzystania z dynamicznego przydzialu pamieci w jezyku C++ | + | Problem: Podczas korzystania z dynamicznego przydzialu pamieci w jezyku C++ (za pomoca operatora new) jesli nie uda sie zarezerwowac bloku pamieci o odpowiednim rozmiarze, to zostanie rzucony wyjatek std::bad_alloc. Sprawdzanie czy po każdym wywolaniu new nie zostal rzucony wyjatek jest klopotliwe. Oczywiscie mozna uzywac wersji operatora new, ktora nie rzuca wyjatkiem new (std::nothrow) Typ, ale wtedy pomijamy obsługę błędów. |
- | * (za pomoca operatora new) jesli nie uda sie zarezerwowac bloku pamieci | + | |
- | * o odpowiednim rozmiarze, to zostanie rzucony wyjatek std::bad_alloc. | + | Opis: Bilbioteka standardowa udostepnia mozliwosc zdefiniowania wlasnej funkcji |
- | * Sprawdzanie czy po każdym wywolaniu new nie zostal rzucony wyjatek jest | + | obslugi braku pamieci za pomoca funkcji z biblioteki standardowej set_new_handler(). |
- | * klopotliwe. Oczywiscie mozna uzywac wersji operatora new, ktora nie rzuca | + | Funkcja obslugi braku pamieci powinna uzyskac wiecej pamieci, rzucic wyjatek, |
- | * wyjatkiem new (std::nothrow) Typ, ale wtedy pomijamy obsługę błędów. | + | przerwac program lub chociaz ustawic inna funkcje obslugi (lub odinstalowac |
- | * | + | obecna), bo program bedzie sie wykonywal w nieskonczonej petli. |
- | * Opis: Bilbioteka standardowa udostepnia mozliwosc zdefiniowania wlasnej funkcji | + | |
- | * obslugi braku pamieci za pomoca funkcji z biblioteki standardowej set_new_handler(). | + | Zastosowanie: Glownym zadaniem funkcji obslugi braku pamieci jest uzyskanie |
- | * Funkcja obslugi braku pamieci powinna uzyskac wiecej pamieci, rzucic wyjatek, | + | wiekszej ilosci pamieci (np. przez usuniecie nieuzywanych obiektow) tak aby |
- | * przerwac program lub chociaz ustawic inna funkcje obslugi (lub odinstalowac | + | aplikacja mogla dzialac dalej, czasami jest to niemozliwe, funkcja ta jest tez |
- | * obecna), bo program bedzie sie wykonywal w nieskonczonej petli. | + | przydatna gdy nie chcemy przy kazdym tworzeniu nowego obiektu obslugiwac |
- | * | + | wyjatku bad_alloc, w ten sposob, gdy juz wystapi problem braku pamieci mozemy |
- | * Zastosowanie: Glownym zadaniem funkcji obslugi braku pamieci jest uzyskanie | + | to obsluzyc w jednym miejscu i zamknac aplikacje w mniej brutalny sposob, mamy |
- | * wiekszej ilosci pamieci (np. przez usuniecie nieuzywanych obiektow) tak aby | + | szanse na pozamykanie polaczen, plikow oraz poinformowanie uzytkownika o tym co |
- | * aplikacja mogla dzialac dalej, czasami jest to niemozliwe, funkcja ta jest tez | + | sie stalo. |
- | * przydatna gdy nie chcemy przy kazdym tworzeniu nowego obiektu obslugiwac | + | |
- | * wyjatku bad_alloc, w ten sposob, gdy juz wystapi problem braku pamieci mozemy | + | Przyklad: Nizej zostanie przedstawiony przyklad klasy reprezentujacej obiekty |
- | * to obsluzyc w jednym miejscu i zamknac aplikacje w mniej brutalny sposob, mamy | + | zajmujace duzo pamieci, obiekty beda rejestrowane w rejstrze przez ktory tez |
- | * szanse na pozamykanie polaczen, plikow oraz poinformowanie uzytkownika o tym co | + | jest mozliwy do nich dostep, rejestr bedzie usuwac obiekty gdy bedzie |
- | * sie stalo. | + | potrzebna pamiec. |
- | * | + | |
- | * Przyklad: Nizej zostanie przedstawiony przyklad klasy reprezentujacej obiekty | + | |
- | * zajmujace duzo pamieci, obiekty beda rejestrowane w rejstrze przez ktory tez | + | |
- | * jest mozliwy do nich dostep, rejestr bedzie usuwac obiekty gdy bedzie | + | |
- | * potrzebna pamiec. | + | |
- | */ | + | |
+ | <code c++> | ||
#include <new> // zawiera funkcje set_new_handler | #include <new> // zawiera funkcje set_new_handler | ||
#include <iostream> // obiekty cout, cerr, etc. | #include <iostream> // obiekty cout, cerr, etc. | ||
Linia 164: | Linia 159: | ||
return 0; | return 0; | ||
} | } | ||
+ | </code> |