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

  • AllYourNewsByMe

    AllYourNewsB

    18 Temmuz 2011
  • FOSDEM

    FOSDEM

    13 Ocak 2009
  • Tips On Linux

    Tips On Linu

    26 Temmuz 2008