ExpertiDict

C++ · Avançado · Inglês · Técnico

custom deleter

ˈkʌstəm dɪˈliːtɚsubstantivo

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.

Veja também

Todos os termos de C++