分配器命名要求——例外

Allocator named requirements -- exceptions

[allocator.requirements.general]/37

Throws: allocate may throw an appropriate exception.

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

有效的自定义分配器是否可以对任何请求抛出 double


上下文:使用分配器的 noexcept 函数的实现,但如果所有分配都失败,则具有回退策略来执行某些操作。

Any limitations on "appropriate" implied elsewhere?

没有。 “适当”限定符没有 objective 含义。这实际上是一个使用常识的建议。 allocate.

抛出的类型没有限制

Can a valid custom allocator just throw a double on any request?

如果作者认为double合适就符合了。我自己不认为它“合适”,但由作者决定。

Context: implementation of a noexcept function that uses allocator, but has fallback strategy to do something if all allocations fail.

您应该使用 catch-all 块:

try {
    ptr = a.allocate();
} catch(...) {
    // deal with it
}