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.