Adakah Saya Perlu Menutup Ifstream Secara Manual?
Dalam C , Resources Acquisition Is Initialization (RAII) memastikan objek dibersihkan secara automatik dan dilepaskan apabila mereka keluar dari skop. Mekanisme ini digunakan dalam pelbagai kelas, termasuk std::ifstream.
Apabila objek std::ifstream dicipta, ia membuka fail yang ditentukan untuk input. Secara lalai, fail kekal terbuka sehingga objek dimusnahkan. Walau bagaimanapun, soalan biasa timbul: adakah saya perlu memanggil file.close() secara eksplisit secara manual atau bolehkah saya bergantung pada RAII untuk mengendalikannya?
Jawapannya TIDAK.
RAII dan ifstream
Tujuan RAII adalah untuk mengurangkan keperluan pembersihan sumber manual. Dalam kes ifstream, pemusnah bertanggungjawab untuk menutup fail yang berkaitan, membuat panggilan eksplisit ke file.close() tidak diperlukan.
Dalam kod contoh yang disediakan, objek fail diisytiharkan dalam skop readContentsOfFile () fungsi. Apabila fungsi kembali, objek keluar dari skop, dan pemusnah dipanggil secara automatik. Ini memastikan bahawa fail ditutup sebelum fungsi keluar.
Skop Bersarang untuk Penutupan Awal
Walaupun RAII menjamin penutupan fail apabila objek dimusnahkan, ia mungkin wajar untuk ditutup fail tadi dalam fungsi. Ini boleh dicapai menggunakan skop bersarang:
{ std::ifstream file(fileName.c_str()); if (file.good()) { std::stringstream buffer; buffer << file.rdbuf(); } file.close(); }
Dalam skop bersarang, objek fail dibuat dan dibuka. Jika fail itu sah, ia diproses serta-merta dan fail ditutup sebelum skop dalaman tamat.
Kesimpulan
std::ifstream sudah menguruskan fail penutupan melalui RAII. Panggilan manual ke fail.close() adalah tidak perlu dan harus dielakkan kerana ia melanggar prinsip RAII dalam C .
Atas ialah kandungan terperinci Sekiranya saya Menutup `ifstream` secara Manual dalam C ?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!