Funkcja nie będzie mieć również wycieku pamięci w momencie, gdy funkcja pracaZzasobem( KlasaZasobu* ) nie wywoła wyjątku, ponieważ skończy się zasięg ważności obiektu zasob i zostanie on także usunięty (a wraz z nim zwolniony zostanie alokowany obszar pamięci).

Programista nie musi pisać takiej klasy pomocniczej dla klasy, której obiekt alokuje, używając operatora new. Z pomocą przychodzą szablony klas. W standardowej bibliotece klas jest to szablon auto ptr, ale dostępne są również inne implementacje. Najpopularniejszą są szablony z biblioteki Boost: scoped_ptr (dla prostego zwalniania obiektów w danym zasięgu ważności) oraz shared_ptr (dla automatycznego zwalniania współdzielonych zasobów poza zasięgiem ważności).

Problem wycieków pamięci w związku z obsługą wyjątków dotyczy głównie C++. W Delphi wprowadzono specjalną konstrukcję try...finally...except, która pozwala na kontrolowanie zwalniania zasobów w momencie wystąpienia wyjątku. W większości innych języków problem ten nie występuje, ze względu na brak mechanizmu wyjątków lub inny sposób zarządzania pamięcią np. Garbage collection.

Zobacz też

odśmiecanie pamięci destruktor wyciek rejestrów

Kategoria:Zarządzanie pamięcią Kategoria:Błędy programów komputerowych