Allocator
が標準ライブラリアロケータインターフェイスに準拠している場合は、ヌルポインタを使用してstd::allocator_traits<Allocator>::deallocate
を呼び出しても安全ですか? Allocator
がstd::allocator
(最終的にはdelete
になるため)だとわかっていますが、Allocator
がクライアント提供クラスの場合はどうなりますか?私は明示的なチェックをしなければならないのですか? の記事Allocator conceptにはそのような保証が記載されていないので、答えは「はい」だと思いますが、私は確信しています。nullポインタでallocator_traits :: deallocateを呼び出す
質問の動機を少し与えるために、変数p
がバッファへのポインタを保持すると仮定されているユースケースを想像していますが、何らかの理由でバッファがありました(最初はnullptr
に設定されています)。最初の場所に割り当てられないので、p
はヌルポインタのままです。
ストレージへのポインタがnullptrであり、オブジェクトの数が> 0であることを意味しますか? –
オブジェクトの数がゼロかどうかによって答えが変わりますか? –
私の印象は、問題のアロケータが割り当てるためにnullptrを返す場合、nullptrも同様に割り当てを解除するための有効な引数であることです。しかし、オブジェクトの数が0より大きい場合、なぜnullptrを返すのか想像できません。 –