El ile bir ifstream kapatmak gerekiyor mu?
std::ifstream
bir kullandığımda manuel close()
aramam gerekiyor mu?
Kod örneği için:
std::string readContentsOfFile(std::string fileName) {
std::ifstream file(fileName.c_str());
if (file.good()) {
std::stringstream buffer;
buffer << file.rdbuf();
file.close();
return buffer.str();
}
throw std::runtime_exception("file not found");
}
file.close()
el ile aramama gerek var mı? ifstream
kapanış dosyalar için RAII tarafından kullanılmamalıdır?
CEVAP
HAYIR
Bu DEMİRYOLU için, yıkıcı işini yapsın. Elle kapanışta zarar yok, ama C, sınıflar ile C programlama değil.
Eğer bir işlev sona ermeden önce dosyayı kapatmak isterseniz her zaman iç içe bir kapsam kullanabilirsiniz.
Standart (27.8.1.5 Sınıf şablonu basic_ifstream), ifstream
basic_filebuf
üye gerçek dosya tanıtıcı holding ile hayata geçirilecek. İfstream nesne yok olduğunda, aynı zamanda basic_filebuf
üzerinde yıkıcı çağırır bir üyesi olarak kabul edilir. Ve standart (27.8.1.2), bu yıkıcı dosyayı kapatır:
virtual ˜basic_filebuf();
Etkileri:Yok sınıf
basic_filebuf<charT,traits>
bir nesne. Aramalarclose()
.
Nasıl iOS klavyeyi kapatmak mı?...
El ile HABTM katılmak bir tablo için b...
Tıklayın jquery kapatmak için Menü dış...
Std :: LF, CR, CRLF?işlemek için ifstr...
Kullanım alanı 'datetime' ve...