Sobes.tech
Junior — Middle

Como é feita a remoção de um objeto através do deleter ao usar unique_ptr?

sobes.tech IA

Resposta da IA

Ao usar std::unique_ptr, a eliminação do objeto gerido ocorre através de um objeto especial chamado deleter (deletador). Por padrão, este é std::default_delete<T>, que chama o operador delete para o ponteiro.

Se ao criar um unique_ptr passar um deleter próprio, então será esse deleter que será chamado na destruição do unique_ptr. O deleter é um objeto invocável (uma função, um objeto funcional ou uma lambda) que aceita um ponteiro e é responsável por liberar os recursos corretamente.

Exemplo com um deleter personalizado:

#include <memory>
#include <iostream>

struct MyDeleter {
    void operator()(int* p) const {
        std::cout << "A eliminar objeto através de MyDeleter" << std::endl;
        delete p;
    }
};

int main() {
    std::unique_ptr<int, MyDeleter> ptr(new int(42));
    // Ao sair do main, será chamado MyDeleter::operator()(ptr.get())
}

Dessa forma, a eliminação do objeto ocorre automaticamente ao destruir o unique_ptr, chamando o deleter com o ponteiro para o objeto.