Mam taki kod:
bool create_result_file(std::fstream& result_file, const std::string& result_filename) {
result_file.open(result_filename, std::fstream::out);
if (!result_file.good()) {
return false;
}
return true;
}
int main(int argc, char *argv[])
{
std::fstream result_file;
std::string result_filename = argv[2];
if (!create_result_file(result_file, result_filename)) {
std::cerr << "Can not create or open the result file.\n";
return 3;
}
result_file << "Asdf";
std::cout << "Result file created successfully.\n";
result_file.close();
return 0;
}
Czy w przypadku gdy w module programu otwieram plik tylko raz nadal opłaca się zastosować RAII tak, żeby nie przejmować się manualną dealokacją zasobu? Oczywiście gdyby wystąpił exception gdzieś między otwarciem pliku, a jego zamknięciem wówczas doszłoby do wycieku pamięci. Zatem moje pytanie brzmi - czy zawsze należy implementować klasę do otwarcia zasobu, która dbałaby o to, żeby ten zasób był zwalniany "automatycznie"?
I jeszcze jedno - co by się stało gdyby poleciał exception podczas wykonywania metody good w 3. linijce kodu? Nastąpiłby wyciek wszystkich zmiennych zaalokowanych w main czy wyciekłby jedynie obiekt result_file?