小编MAA*_*612的帖子

STL的allocator_traits中静态成员函数的用途是什么?

我正在尝试实现一个STL样式的容器类,我有一个关于在我的类中使用allocator的问题:

STL中静态成员函数的用途是什么allocator_traits

到现在为止,我认为我应该实例化allocator_type(可能通过某种空基础优化来改善内存占用).因此,我最终会得到这样的结论:

struct EmptyBaseOpt : allocator_type
{
  EmptyBaseOpt(const allocator_type & a, allocator_type::const_pointer p)
  : allocator_type(a), prefix_ptr(p) { }

  allocator_type::pointer prefix_ptr;
}

EmptyBaseOpt ebo;
Run Code Online (Sandbox Code Playgroud)

然后,我可以通过以下方式使用分配器:

allocator_type & alloc = ebo;
alloc.allocate(100, ebo.prefix_ptr);
Run Code Online (Sandbox Code Playgroud)

另一方面,allocator_traits在C++ 11中似乎意味着以下用法:

std::allocator_traits<allocator_type>::allocate(100, ebo.prefix_ptr);
Run Code Online (Sandbox Code Playgroud)

我想这个静态allocate成员函数可能会allocator_type通过其默认构造函数创建一个临时的临时实例.但这导致了以下问题:

  1. 如果allocator_type是有状态分配器会发生什么?如果我使用静态成员函数allocator_traits而不是从一个实例中调用非静态方法,这样的分配器是否能够保持其状态allocator_type

  2. allocator_type如果我可以直接使用静态成员函数,为什么我要实例化并烦恼像EBO这样的东西allocator_traits呢?

  3. 如前所述,我的理解是,任何类类模板参数都应该在我的容器类中实例化,以便允许这些参数的有状态版本.这种理解是否正确,它如何适应静态成员函数allocator_traits

c++ stl allocator c++11

4
推荐指数
2
解决办法
181
查看次数

标签 统计

allocator ×1

c++ ×1

c++11 ×1

stl ×1