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

  • Paste Magazine

    Paste Magazi

    28 AĞUSTOS 2008
  • SoundHound

    SoundHound

    8 Mart 2006
  • WePlayWeWatch

    WePlayWeWatc

    3 Temmuz 2013