O que é RAII (Resource Acquisition Is Initialization) em C++ e para que serve?
Olá, colegas! Estou estudando C++ e ouço constantemente sobre RAII, mas não consigo entender completamente esse conceito. Aparentemente, a sigla significa "aquisição de recurso é inicialização", mas isso soa meio confuso.
Tenho um problema específico. Estou escrevendo uma classe pequena para trabalhar com arquivos. Aqui está meu código:
```cpp
class FileHandler {
public:
FileHandler(const char* filename) {
file = fopen(filename, "r");
if (!file) {
std::cerr << "Não foi possível abrir o arquivo" << std::endl;
}
}
void readData() {
// lendo dados
char buffer[100];
fgets(buffer, 100, file);
}
~FileHandler() {
// aqui eu esqueço de fechar o arquivo
}
private:
FILE* file;
};
```
O problema é que frequentemente esqueço de fechar o arquivo no destructor, ou se ocorre um erro no constructor, tenho um vazamento de recursos. Além disso, ouvi dizer que se uma exceção for lançada, tudo pode quebrar.
Expliquem, por favor,