2010-12-06 3 views
0

나는 TFile이라는 클래스를 가지고 있으며 수정할 수 없다. 입/출력 파일을 찾을 수 없으면 예외가 발생하지 않지만 IsZombie 메서드를 사용하여 iternal 상태를 확인할 수 있습니다. 지금, 나는 매우 간단한 예외를 구현했습니다 :FileNotFoundError 예외를 구현해야합니까?

class FileNotFoundError : public std::runtime_error 
{ 
public : 

FileNotFoundError(const std::string & file_name="") 
: runtime_error("cannot find file " + file_name), filename(file_name) {}; 
string filename; 
~FileNotFoundError() throw() {}; 
}; 

을 내가로 사용 :

f = new TFile(total.c_str(), "RECREATE") ; 
if (f->IsZombie()) 
{ 
    throw FileNotFoundError(total); 
} 

이 예외를 구현하는 더 나은 방법이, 내 말은 : 그것은 userful을 던져하는 것입니다 내 예외 대신 ifstream::failure 표준 예외가 발생 했습니까?

+0

사이드 코멘트로서 위의 스 니펫 -> 메모리 누수에서 방금 할당 한 메모리를 공개하지 않고 버릴 수도 있습니다. –

답변

2

'파일을 찾을 수 없음'오류 상태를 잡는 매우 선택적 방법을 제공하는 표준 예외는 없습니다. 그래서, 예외를 가지고 그 조건을 알리기를 원한다면, 클라이언트 코드가 의미있는 일을하도록 허용하고 싶다면 당신은 그것을위한 당신 자신의 클래스를 생성 할 필요가 있습니다.

그러나 예외가 아직 존재하지 않는 이유가 가장 많이 있습니다. 파일이 예상대로 존재하지 않는다는 것은 정상적인 현상입니다. 프로그램이 파일 시스템을 제어하지 않습니다. 또는 사용자가 파일 이름을 잘못 입력 한 것일 수도 있습니다. 이것이 잘못되었다는 것이 실제로 예외는 아닙니다. 비 예외적 인 경우에는 예외를 사용하지 마십시오.

이것은 혼합 된 메시지입니다. 은 클라이언트 코드가 파일이 존재해야 함을 확인하는 합리적인 방법이있는 경우에 사용합니다. 해당 리소스없이 계속 프로그램을 실행하는 것은 거의 없습니다.

관련 문제