> 백엔드 개발 > C++ > `std::ifstream`은 파기 시 파일을 자동으로 닫나요?

`std::ifstream`은 파기 시 파일을 자동으로 닫나요?

Mary-Kate Olsen
풀어 주다: 2024-12-06 18:00:38
원래의
276명이 탐색했습니다.

Does `std::ifstream` Automatically Close Files Upon Destruction?

ifstream 소멸자가 파일을 자동으로 닫나요?

std::ifstream 스트림을 활용할 때 다음과 같은 질문이 생깁니다. close() 메소드?

제공된 코드에 표시된 대로 조각:

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()에 대한 명시적인 호출이 필수적인가요, 아니면 RAII가 파일 폐쇄를 처리할 수 있습니까?

답변: 아니요

RAII(Resource Acquisition Is 초기화)는 다음을 통해 리소스를 적절하게 정리하고 할당 해제하는 C 패러다임입니다. 소멸자. ifstream의 경우 파일 핸들은 생성 중에 획득된 리소스입니다. ifstream 객체가 범위를 벗어나면 해당 소멸자가 호출되어 파일 핸들이 닫힙니다. 본질적으로 RAII는 이 작업을 자동화하므로 수동 종료가 필요하지 않습니다.

file.close()를 명시적으로 호출하는 것이 해를 끼치지는 않지만 RAII가 의도한 목적을 달성하도록 허용하는 것이 좋은 습관으로 간주됩니다. C 코드의 수동 종료는 C 스타일 프로그래밍의 이월로 볼 수 있습니다.

함수 범위 내에서 파일을 조기에 닫아야 하는 경우 중첩 범위가 실행 가능한 솔루션입니다.

{
  std::ifstream file(fileName.c_str());
  if (/*some condition*/) {
    file.close();
  }
}
로그인 후 복사

내부 범위를 벗어나 활성화된 ifstream의 소멸자는 조건에 관계없이 파일을 닫습니다.

결론적으로, std::ifstream 객체는 RAII를 사용하여 파일이 범위를 벗어나면 자동으로 닫으므로 수동으로 정리할 필요가 없습니다. 이 원칙을 수용하면 깔끔하고 효율적인 C 코딩이 촉진됩니다.

위 내용은 `std::ifstream`은 파기 시 파일을 자동으로 닫나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿