Menguruskan Pemerolehan Sumber dengan std::ifstream dan RAII
Jika anda bekerja dengan fail I/O dalam C , anda mungkin tertanya-tanya sama ada anda perlu menutup ifstream yang dibuka secara manual.
RAII dan Fail I/O
Idiom C Resource Acquisition Is Initialization (RAII) memudahkan pengurusan sumber dengan memastikan sumber diperoleh secara automatik dan dikeluarkan apabila hayat objek bermula dan berakhir, masing-masing.
Dalam kes std::ifstream, RAII beroperasi sebagai berikut:
Adakah Anda Perlu Tutup ifstream Secara manual?
Tidak. Terima kasih kepada RAII, anda tidak perlu memanggil ifstream::close() secara manual. Pemusnah akan mengendalikan tugas ini untuk anda.
Penutupan Manual Dianggap Memudaratkan
Menutup ifstream secara manual bukanlah pendekatan C pilihan. Ia mengalahkan tujuan RAII dengan memperkenalkan semula potensi kebocoran sumber (jika anda terlupa untuk menutup fail) dan keadaan perlumbaan (jika fail ditutup lebih awal).
Bila Tutup Secara Manual
Walaupun RAII secara amnya menguruskan penutupan fail, mungkin terdapat keadaan di mana anda perlu menutup fail lebih awal. Dalam kes sedemikian, anda boleh membuat skop bersarang:
if (file.good()) { { std::stringstream buffer; buffer << file.rdbuf(); } // File will be closed here return buffer.str(); }
Atas ialah kandungan terperinci Adakah Saya Perlu Menutup `std::ifstream` secara Manual dalam C ?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!