C++ · Intermediário · Inglês · Técnico
RAII
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 unlockExemplos
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).