Sobes.tech
Junior — Middle

Hogyan történik egy objektum törlése a deleter segítségével a unique_ptr használatakor?

sobes.tech MI

Válasz az MI-től

A std::unique_ptr használatakor a kezelt objektum törlése egy speciális objektum, úgynevezett deleter (törlő) segítségével történik. Alapértelmezés szerint ez a std::default_delete<T>, amely a delete operátort hívja meg a mutatón.

Ha a unique_ptr létrehozásakor saját deletert ad meg, akkor az lesz az, aki a unique_ptr megsemmisítésekor meghívásra kerül. A deleter egy hívható objektum (egy függvény, egy funkcióobjektum vagy egy lambda), amely elfogad egy mutatót, és felelős a források helyes felszabadításáért.

Példa egy egyedi deleterrel:

#include <memory>
#include <iostream>

struct MyDeleter {
    void operator()(int* p) const {
        std::cout << "Objektum törlése a MyDeleter segítségével" << std::endl;
        delete p;
    }
};

int main() {
    std::unique_ptr<int, MyDeleter> ptr(new int(42));
    // A main végén meghívásra kerül a MyDeleter::operator()(ptr.get())
}

Így az objektum törlése automatikusan történik a unique_ptr megsemmisítésekor, a deleter meghívásával a mutatóval az objektumra.