SuperNoisy

Czirkos Zoltán · 2022.06.21.

Memóriakezelést, explicit konstruktor- és destruktorhívásokat ellenőrző segédosztály.

A SuperNoisy osztálynak az összes erőforráskezelő függvénye (konstruktor, destruktor, értékadó operátor) meg van valósítva, és azok mind a képernyőre logolnak. Ezen felül, az egyes objektum példányok közös tárolóba vannak regisztrálva, így az osztály ellenőrizni tudja a memóriakezelési hibákat: többszörös konstruktorhívásokat, destruktorhívásokat, esetleg üres (elmozgatott) objektumok elérését.

A kód letölthető innen: supernoisy.cpp, tesztekkel: supernoisy_test.cpp.

Példa:

int main() {
    Noisy x;
    Noisy y = x;
    new (&y) Noisy;
}
Noisy letrehozva @0x7ffcb7cf4100
Noisy masolva ide @0x7ffcb7cf4110 innen @0x7ffcb7cf4100
Noisy megszunt itt @0x7ffcb7cf4110
terminate called after throwing an instance of 'std::logic_error'
  what():  Letezo objektumra hivsz konstruktort
Aborted
int main() {
    {
        Noisy n;
        Noisy::report();
    }
    std::cout << std::endl;
    Noisy::report();
}
Noisy letrehozva @0x7ffca0082234
1 db objektum letrehozva
1 db objektum ervenyes, nem ures
Noisy megszunt itt @0x7ffca0082234

0 db objektum letrehozva
0 db objektum ervenyes, nem ures