7

free(NULL)との両方::operator delete(NULL)が許可されます。アロケータの概念 (例: std::allocator も許可deallocate(NULL,1)されていますか、それとも独自のガードを配置する必要がありますか?

4

1 に答える 1

10

独自のチェックを追加する必要があります。

§20.4. 1.1/8 によると、以下deallocateが必要です。

p は、allocate() から取得したポインター値でなければなりません。n は、p を返した allocate の呼び出しに最初の引数として渡された値と等しくなければなりません。

allocateストレージを指定できない場合に例外をスローします (§20.4. 1.1/7)。つまり、allocate決して 0 を返さdeallocateないため、0 を取得するべきではありません。0 を渡すと、未定義の動作が発生します。

于 2010-06-23T18:50:30.917 に答える