分配器命名要求——例外

Ale*_*iev 2 c++ allocator language-lawyer

[分配器.要求.一般]/37

抛出: allocate可能抛出适当的异常。

其他地方暗示的“适当”有什么限制吗?

有效的自定义分配器可以double在任何请求上抛出 a 吗?


上下文:使用分配器的函数的实现noexcept,但具有后备策略,以便在所有分配失败时执行某些操作。

eer*_*ika 6

其他地方暗示的“适当”有任何限制吗?

不。“适当”限定词没有客观意义。这实际上是一个使用常识的建议。抛出的类型没有限制allocate

有效的自定义分配器可以在任何请求上抛出一个 double 吗?

如果作者认为 double 合适,那就符合要求了。我自己并不认为它“合适”,但这取决于作者的决定。

上下文:使用分配器的 noexcept 函数的实现,但具有后备策略,以便在所有分配失败时执行某些操作。

您应该使用一个包罗万象的块:

try {
    ptr = a.allocate();
} catch(...) {
    // deal with it
}
Run Code Online (Sandbox Code Playgroud)