C++ · Avançado · Inglês · Técnico
custom deleter
Função ou objeto passado a unique_ptr ou shared_ptr para definir como o recurso é liberado, no lugar de delete. Permite gerenciar arquivos, handles e memória alocada com malloc.
Onde usar
Em code review, aparece ao embrulhar APIs em C: fopen e fclose, malloc e free, handles de sistema. Em unique_ptr o deleter faz parte do tipo; em shared_ptr, não.
Em código
struct FechaArq {
void operator()(std::FILE* f) const {
if (f) std::fclose(f);
}
};
std::unique_ptr<std::FILE, FechaArq>
arq(std::fopen("a.txt", "r"));Exemplos
We use a custom deleter to close the C file handle.
Usamos um custom deleter para fechar o handle de arquivo do C.
For memory from malloc, give the unique pointer a custom deleter that calls free.
Para memória do malloc, dê ao unique pointer um custom deleter que chama free.
Cuidado
Esquecer o deleter e deixar o delete padrão agir sobre memória do malloc ou de fopen é comportamento indefinido.