ExpertiDict

C++ · Intermediário · Inglês · Técnico

RAII

ˌɑːr eɪ aɪ ˈaɪsigla

Idioma em que a posse de um recurso é atrelada ao tempo de vida de um objeto: o construtor adquire, o destrutor libera. Garante limpeza mesmo com exceções.

Onde usar

É a base de std::unique_ptr, std::lock_guard e std::fstream. Em code review, qualquer par manual de adquirir e liberar, como lock e unlock, costuma gerar o pedido de um wrapper RAII.

Em código

std::mutex m;
int contador = 0;
void inc() {
  std::lock_guard<std::mutex> g(m);  // lock
  ++contador;
}  // destrutor de g faz unlock

Exemplos

We wrapped the file handle in a class to follow RAII.

Embrulhamos o handle do arquivo em uma classe para seguir RAII.

If you call lock and unlock by hand, use an RAII guard instead.

Se você chama lock e unlock na mão, use um guard RAII.

Cuidado

Apesar do nome, o que importa na prática é a liberação automática no destrutor, não só a aquisição na inicialização.

Origem

Sigla de Resource Acquisition Is Initialization (aquisição de recurso é inicialização).

Veja também

Todos os termos de C++