Allocator concept和std::allocator_traits没有说明allocate
是否会投掷。
所以当我使用allocator编写容器时,如何知道是否检查返回类型或使用catch
?
答案 0 :(得分:3)
您引用的页面的要求部分中的表格提供了足够的信息,当它可能抛出异常时以及它不能抛出异常时。下面是分配器可能抛出异常时的引用。
a.allocate(n)
分配适用于T
类型的n个对象的存储,但不构造它们。可能会抛出异常。
在那里没有描述抛出什么类型的异常,并且可能依赖于实现。通常在STL中为std::bad_alloc
。
答案 1 :(得分:2)
是的,它可能会抛出。例外是std::bad_alloc
,因为它使用传递给它的allocator
,而std::allocator
会抛出std::bad_alloc
。
在您提到的页面中介绍了两种情况:
- 调用a.allocate(n)
- 另外传递内存位置提示提示。如果可能,调用a.allocate(n,提示)。如果不可能(例如,a没有双参数成员函数allocate()),则调用a.allocate(n)
醇>
所以基本上你可以转向: