C++ allocator::allocate 应该抛出还是不抛出?
Should C++ allocator::allocate throw or not?
Allocator concept and std::allocator_traits 没有说明 allocate
是否会抛出。
所以当我使用分配器编写容器时,如何知道是检查 return 类型还是使用 catch
?
是的,它可能会抛出。例外是 std::bad_alloc
因为它使用传递给它的 allocator
而 std::allocator
将抛出 std::bad_alloc
.
在您引用的页面中介绍了两种情况:
- Calls a.allocate(n)
- Additionally passes memory locality hint hint. Calls a.allocate(n, hint) if possible. If not possible (e.g. a has no two-argument member function allocate()), calls a.allocate(n)
所以基本上你可以转向这个:
您引用的页面的 Requirements 部分中的 table 提供了足够的信息,说明何时可以抛出异常以及何时不得抛出异常。下面是分配器可能抛出异常的引用。
a.allocate(n)
allocates storage suitable for n objects of type T
, but does not construct them. May throw exceptions.
那里没有描述抛出什么类型的异常,可能取决于实现。在STL中一般是std::bad_alloc
。
Allocator concept and std::allocator_traits 没有说明 allocate
是否会抛出。
所以当我使用分配器编写容器时,如何知道是检查 return 类型还是使用 catch
?
是的,它可能会抛出。例外是 std::bad_alloc
因为它使用传递给它的 allocator
而 std::allocator
将抛出 std::bad_alloc
.
在您引用的页面中介绍了两种情况:
- Calls a.allocate(n)
- Additionally passes memory locality hint hint. Calls a.allocate(n, hint) if possible. If not possible (e.g. a has no two-argument member function allocate()), calls a.allocate(n)
所以基本上你可以转向这个:
您引用的页面的 Requirements 部分中的 table 提供了足够的信息,说明何时可以抛出异常以及何时不得抛出异常。下面是分配器可能抛出异常的引用。
a.allocate(n)
allocates storage suitable for n objects of typeT
, but does not construct them. May throw exceptions.
那里没有描述抛出什么类型的异常,可能取决于实现。在STL中一般是std::bad_alloc
。