C ++自定义分配器

时间:2014-12-15 15:18:28

标签: 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;
}

以这种方式调用会使帮助构造函数在程序中被调用。它并不像矢量那样发生。关于模板初始化,有什么我不理解的东西。请帮忙

1 个答案:

答案 0 :(得分:2)

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

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

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

相关问题