allocate
方法传入 0 是否可以抛出异常?
谢谢。
附言
If n == 0, the return value is unspecified.
这是否意味着 allocate
不应该抛出异常?我倾向于认为,如果 n==0 不允许抛出,那么标准会清楚地说明这一点。
最佳答案
所有标准必须说明的 (§20.1.5/2) 都是给定的
T
– 任何类型X
– 类型T
的 Allocator 类
a
–X&
类型的值
n
–X::size_type
类型的值,
如果 n
等于 0,则表达式 a.allocate(n)
的返回值未指定。
一方面,考虑到 X::allocate
没有任何强制性异常规范并且显式可能抛出 std::bad_alloc
,我不明白为什么它也不能抛出其他类型的异常。另一方面,该措辞特别指出了 n
等于零的条件,并直接暗示有一个返回值,这意味着您不应该 扔。我认为它可能有一些解释,但我个人倾向于后者并认为它是一个普通的代码路径。
关于c++ - 符合标准的自定义分配器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6065814/