std :: scoped_allocator_adaptor强制分配器可以默认构造吗?

时间:2014-09-12 11:11:27

标签: c++ c++11

让我们从分配器类型的标准要求开始:

  

17.6.3.5.4-5

     

分配器类型X应满足 CopyConstructible (17.6.3.1)的要求。 X ::指针,X :: const_pointer,X :: void_pointer和X :: const_void_pointer类型应满足NullablePointer(17.6.3.3)的要求。对这些类型的构造函数,比较运算符,复制操作,移动操作或交换操作不应通过异常退出。 X :: pointer和X :: const_pointer也应满足随机访问迭代器(24.2)的要求。

template <class Tp>
struct SimpleAllocator {
  typedef Tp value_type;
  SimpleAllocator(ctor args);
  template <class T> SimpleAllocator(const SimpleAllocator<T>& other);

  Tp* allocate(std::size_t n);
  void deallocate(Tp* p, std::size_t n);
};

template <class T, class U>
bool operator==(const SimpleAllocator<T>&, const SimpleAllocator<U>&);
template <class T, class U>
bool operator!=(const SimpleAllocator<T>&, const SimpleAllocator<U>&);

标准对scoped_allocator_adaptor的评价是什么:

  

20.13.3.1

     

scoped_allocator_adaptor();

     

效果:   value-initialize OuterAlloc基类和内部分配器对象。

我正在以微不足道的方式使用我的分配器。

template<typename T>
using sa_t =
std::scoped_allocator_adaptor<SimpleAllocator<T>> ;

int main()
{
  std::vector<int, sa_t<int>> xxx{ sa_t{ SimpleAllocator{Arg{}} } };
  return 0;
}

问题是:

这是否意味着scoped_allocator_adaptor意味着最小的分配器接口不够并且必须提供空状态分配器?

我是否可以创建一个可以默认构造的分配器,但是它可以抛出任何分配/释放内存的请求?换句话说:scoped_allocator_adaptor客户端(我在看你,标准容器)是否被迫忽略这样的默认构造适配器?

0 个答案:

没有答案