我有一個類如下:我應該拋出一個異常,返回一個錯誤代碼,或打印出一些日誌並調用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指針,你應該在初始化過程中保釋出來,而不是在未知的時間。 – mustaccio
@mustaccio如果我在構造函數中檢查了'NULL指針',我將不得不稍後檢查它(例如在write_data中)? –