Avatar ·

Was ist RAII (Resource Acquisition Is Initialization) in C++ und wozu braucht man es?

Hallo Kollegen! Ich lerne C++ und höre ständig von RAII, kann dieses Konzept aber nicht ganz verstehen. Es wird als "Ressourcenerwerb ist Initialisierung" übersetzt, aber das klingt irgendwie verwirrend. Ich habe ein konkretes Problem. Ich schreibe eine kleine Klasse für die Arbeit mit Dateien. Hier ist mein Code: ```cpp class FileHandler { public: FileHandler(const char* filename) { file = fopen(filename, "r"); if (!file) { std::cerr << "Datei konnte nicht geöffnet werden" << std::endl; } } void readData() { // Daten lesen char buffer[100]; fgets(buffer, 100, file); } ~FileHandler() { // hier vergesse ich, die Datei zu schließen } private: FILE* file; }; ``` Das Problem ist, dass ich oft vergesse, die Datei im Destruktor zu schließen, oder wenn im Konstruktor ein Fehler auftritt, habe ich einen Ressourcenleck. Außerdem habe ich gehört, dass wenn eine Exception geworfen wird, alles kaputtgehen kann. Bitte erklären Sie mir,