SORU
14 NİSAN 2009, Salı


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
14 NİSAN 2009, Salı


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. Aramalar close().

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • ★TheCrono Official Channel★

    ★TheCrono

    3 Mayıs 2014
  • optionalinfo

    optionalinfo

    29 EKİM 2005
  • SelmerSaxMan

    SelmerSaxMan

    24 HAZİRAN 2006