次のように私はクラスを持っている:例外をスローするか、エラーコードを返すか、いくつかのログを出力してabort()を呼び出す必要がありますか?
class MyBuffer
{
private:
char* ptr_;
public:
MyBuffer(char* ptr_tmp) : ptr_(ptr_tmp) {};
void write_data(int val)
{
if(ptr_ == NULL)
{
// What should I do here?
// throw an exception, return error code, or just abort()?
}
// Write val to the buffer pointed by ptr_
// ...
}
};
ptr_は、初期化後に変更することはできません。これは、開発者がコンストラクタでNULLポインタを渡す場合に限り、ptr_ == NULL
という文がtrue
になることを意味します。これが発生した場合、例外をスローするか、エラーコードを返すかのいずれかで、処理コードはプログラムをすぐに終了する必要があります。
私は例外とエラーについていくつかの議論を読みました。例外は「予測的」だが「例外的」な場合に使うべきだと私は思う。私の例では、ptr_ == NULL
が真の場合、例外ではなくバグでしょうか?
間違いなくNULLポインタを渡された場合、あなたは初期化時に救済すべきである[私は実際にログレベルがWARNING/INFO対FATAL/SEVEREかもしれませんが、より簡単にデバッグ。になり、関係なく、何かをログに記録したいです]後で不明ではない。 – mustaccio
@mustaccioコンストラクタで 'NULL pointer'をチェックした場合、後で確認する必要があります(write_dataなど)? –