W efekcie powstanie wyciek pamięci.
Aby zaradzić takiej sytuacji i obronić się przed wyciekiem pamięci stosuje się dodatkową klasę, w konstruktorze której przypisuje się alokowany wskaźnik, a w destruktorze zwalnia się alokowany obszar pamięci:
class KlasaZasobu { // definicja klasy
void pracaZzasobem( KlasaZasobu* dana ) { // implementacja funkcji
class KlasaPomocnicza { public: KlasaPomocnicza( KlasaZasobu* wskaznik ) { this->dana = wskaznik;
KlasaZasobu* pobierzWskaznik() { return this->dana;
~KlasaPomocnicza() { delete this->dana;
private: KlasaZasobu* dana;
void funkcja() { KlasaPomocnicza zasob( new KlasaZasobu() ); // 1 pracaZzasobem( zasob.pobierzWskaznik() ); // 2
W (1) następuje stworzenie lokalnego obiektu klasy KlasaPomocnicza i podanie w konstruktorze wskaźnika do nowo alokowanego obszaru pamięci. Konstruktor ten przypisuje polu dana wskaźnik nowo alokowanego obszaru. Następnie zostaje wywołana funkcja pracaZzasobem( KlasaZasobu* ), której jako parametr podajemy wskaźnik, korzystając z funkcji w klasie KlasaPomocnicza. Gdy funkcja pracaZzasobem( KlasaZasobu* ) wywoła wyjątek, zostaną usunięte wszystkie obiekty lokalne. W tym wypadku obiektem lokalnym jest obiekt zasob, dla którego zostanie wywołany jego destruktor, w którym nastąpi zwolnienie alokowanego zasobu.