operator newとoperator deleteを書くときは規約を守ろう 8項

operator new を自分で作成するならば、いろいろ約束を守ろうという話。
自分もMonaでなんとなく new をユーザーランド向けに実装しているが以下のルールを一部守っていない気がする。

newのお約束

  • 0byteの要求に対しても正規のポインタを返さなければならない(実装例では0byte要求は1byte要求として扱っている)
  • エラー処理関数を呼ばなければならない
  • std::bad_allocを投げないといけない
    • Monaは例外をサポートしていないので今のところ無理p

deleteのお約束

  • NULLポインタのdeleteを安全に行わせる。

つまりこれは


よく見かけるコード

if (somePointer != NULL) delete somePointer; 

これでよい

delete somePointer;

ということになる。


追記: Monaユーザランドで、newの0割り当て対応, deleteのNULL許容を実装しました。


Effective C++ 【改訂第2版】 アスキーアジソンウェスレイシリーズ―Ascii Addison Wesley programming seriesを1項ずつ読んでいます。