2010-12-06 40 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

'ファイルが見つかりません'というエラー状態を検出するための選択肢が非常に多い標準例外はありません。だから、もしあなたが例外でその条件を知らせたいのであれば、クライアントコードが何か意味のあることをできるようにしたいのであれば、あなた自身のクラスを作成する必要があります。

例外がまだ存在していない理由はありますが、これは最も一般的な事故でもあります。それはあなたがそれが期待されるときにファイルがそこにないことはちょっと普通です。あなたのプログラムはファイルシステムを制御していません。あるいは、ユーザーがファイル名を間違って入力したようなものかもしれません。これが間違っているということは本当に例外的なことではありません。例外的でない場合は例外を使用しないでください。

これは混在したメッセージです。 は、クライアントコードがファイルが存在する必要があるかどうかをチェックする妥当な方法がある場合に使用します。およびそのリソースなしでプログラムを継続して実行する可能性は低いです。

関連する問題