Sobes.tech
Junior — Middle

Ako sa vykonáva odstránenie objektu cez deleter pri použití unique_ptr?

sobes.tech AI

Odpoveď od AI

Pri použití std::unique_ptr sa odstránenie spravovaného objektu vykonáva prostredníctvom špeciálneho objektu nazývaného deleter (vymazávač). Predvolený je std::default_delete<T>, ktorý volá operátor delete na ukazovateli.

Ak pri vytváraní unique_ptr zadáte vlastný deleter, bude práve ten volaný pri zániku unique_ptr. Deleter je volateľný objekt (funkcia, funkčný objekt alebo lambda), ktorý prijíma ukazovateľ a je zodpovedný za správne uvoľnenie zdrojov.

Príklad s vlastným deleterom:

#include <memory>
#include <iostream>

struct MyDeleter {
    void operator()(int* p) const {
        std::cout << "Odstraňovanie objektu cez MyDeleter" << std::endl;
        delete p;
    }
};

int main() {
    std::unique_ptr<int, MyDeleter> ptr(new int(42));
    // Pri ukončení main sa zavolá MyDeleter::operator()(ptr.get())
}

Týmto spôsobom sa odstránenie objektu vykonáva automaticky pri zániku unique_ptr, volaním deleteru s ukazovateľom na objekt.