C++ 自定义分配器

标签 c++ templates allocator

您好,我借助一些资源编写了一个自定义分配器。它适用于 std::vector, list 。但是对于 std::unordered_map 构造函数被调用两次。我不是为什么。有人可以帮我理解正在发生的静态初始化。这是代码

文件:helper.h

template<typename T>
class helper
{
 static const size_t init_size = 12; // 0xF4240 max number of entries in the data structure
public:
      helper() :
      alloc_size(
      sizeof(link) > sizeof(T) ?
      init_size * sizeof(link) : init_size * sizeof(T)), offset(
      sizeof(link) > sizeof(T) ? sizeof(link) : sizeof(T))
  {
       std::cout <<"Initial allocation done" << " I value : " << i << std::endl;
   }


};

文件:main.cpp

int main()
{
    std::unordered_map<long,long,hash<long>, equal_to<long> , myallocator<pair<const long,long> > >            my_map;
}

以这种方式调用它会使 helper 构造函数在程序中被调用两次。它不会像 vector 那样发生。关于模板初始化,有什么我不理解的地方吗?请帮忙

最佳答案

容器不仅可以为您提供的类型创建分配器,还可以通过rebind 为不同的类型创建分配器。这显然是您的情况。您没有提供足够的代码,因此其他人无法编译和检查它,但您可以在 helper 的构造函数中添加:

std::cout << __PRETTY_FUNCTION__ << std::endl;

这适用于 GCC 和 Clang,并将显示函数/类实例化时使用的模板参数。

关于C++ 自定义分配器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27487247/

相关文章:

c++ - 如何使用 Cocos2D-X 画线?

c++ - 为 X 毫秒数创建一个 boost::posix_time::ptime 实例

c++ - 推导非类型模板参数 Unsigned Int/size_t

php - 如何向 Wordpress 模板文件添加结束简码?

c++ - GCC vs VC++ 模板语法错误(为什么不能在两者上编译?)

c++ - uninitialized_copy/fill(In first, In last, For dest, A &a) 是 c++ 标准中的疏忽吗?

c++ - SSE 和 C++ 容器

c++ - 更改 QTableView 中列的顺序

c++ - 实现构造函数是否会阻止自动移动语义?

c++ - std::scoped_allocator_adaptor 的目的是什么?