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

  • GoldgenieOfficial

    GoldgenieOff

    23 Temmuz 2009
  • Phymec

    Phymec

    18 Temmuz 2009
  • TheTwistedFrequency

    TheTwistedFr

    26 NİSAN 2010