Gerenciamento de Memória Baseado em Escopo
Construtores e destrutores permitem que o tempo de vida de um objeto seja rastreado.
Ao envolver um ponteiro em um objeto, você pode liberar memória quando o objeto é destruído. O compilador garante que isso aconteça, mesmo que uma exceção seja lançada.
Isso geralmente é chamado de aquisição de recursos é inicialização (Resource Acquisition Is Initialization, RAII) e fornece ponteiros inteligentes (smart pointers).
Exemplo em C++
void say_hello(std::unique_ptr<Person> person) {
std::cout << "Olá " << person->name << std::endl;
}
- O objeto
std::unique_ptr
é alocado na pilha e aponta para memória alocada no heap. - No final de
diga_ola
, o destrutorstd::unique_ptr
será executado. - O destrutor libera o objeto
Pessoa
para o qual ele aponta.
Construtores especiais de movimento (move) são usados ao passar o “ownership” para uma função:
std::unique_ptr<Person> person = find_person("Carla");
say_hello(std::move(person));