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

  • 8bitdigitaltv

    8bitdigitalt

    31 AĞUSTOS 2011
  • BigDawsTv

    BigDawsTv

    20 HAZİRAN 2012
  • LatinNinja99

    LatinNinja99

    28 EKİM 2011