20.6.9:C++デフォルトアロケータ - サイズがallocateの呼び出しに渡されたサイズと等しくない場合、どうなるべきですか?
void deallocate(pointer p, size_type n);
- 要件:pが割り当てから得られたポインタ値()でなければなりません。 nは、pを返すallocateの呼び出しに最初の引数として渡された値と等しくなります。
- 影響:pによって参照される記憶域の割り当てを解除します。
- 備考:(void *型)(18.6.1)演算子は、削除::使用しますが、この関数が呼び出されたとき、それは指定されていません。
n
はp
を返さ割り当ての呼び出しへの最初のagrgumentとして渡された値と等しくない場合にどうするか
?割り当てを解除しませんか? std::bad_alloc
を投げますか? ...
EDIT: 私は実際に「何が起こる必要がある」との意味は何だった:それは投げるか、カスタム実装に主張しても大丈夫でしょうか?何も未定義の動作につながる要件に違反し、明示的に記載されていないC++標準、中
いつものように
ところで、Microsoftの実装を.:は... – 0xbadf00d
@FrEEzE渡されたサイズを無視する - それはそれは**であることを**があることを知っているので、実装は、パラメータを無視することができます。割り当てサイズ自体を覚えていない場合は、他の実装でも使用できます。 –
サイズを無視することは、未定義の動作の有効な種類の1つです。 –