应该C ++ allocator :: allocate throw吗?

时间:2018-05-13 03:28:34

标签: c++ std allocator

Allocator conceptstd::allocator_traits没有说明allocate是否会投掷。

所以当我使用allocator编写容器时,如何知道是否检查返回类型或使用catch

2 个答案:

答案 0 :(得分:3)

您引用的页面的要求部分中的表格提供了足够的信息,当它可能抛出异常时以及它不能抛出异常时。下面是分配器可能抛出异常时的引用。

  

a.allocate(n)分配适用于T类型的n个对象的存储,但不构造它们。可能会抛出异常。

在那里没有描述抛出什么类型的异常,并且可能依赖于实现。通常在STL中为std::bad_alloc

答案 1 :(得分:2)

是的,它可能会抛出。例外是std::bad_alloc,因为它使用传递给它的allocator,而std::allocator会抛出std::bad_alloc

在您提到的页面中介绍了两种情况:

  
      
  1. 调用a.allocate(n)
  2.   
  3. 另外传递内存位置提示提示。如果可能,调用a.allocate(n,提示)。如果不可能(例如,a没有双参数成员函数allocate()),则调用a.allocate(n)
  4.   

所以基本上你可以转向:

http://en.cppreference.com/w/cpp/memory/allocator/allocate