您好我已经在一些资源的帮助下编写了自定义分配器。它适用于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;
}
以这种方式调用会使帮助构造函数在程序中被调用。它并不像矢量那样发生。关于模板初始化,有什么我不理解的东西。请帮忙
答案 0 :(得分:2)
容器不仅可以为您提供的类型创建分配器,还可以通过rebind
为不同类型创建分配器。这就是你的情况显然发生的事情。您没有提供足够的代码以便其他人可以编译和检查它,但您可以在helper
的构造函数中添加它:
std::cout << __PRETTY_FUNCTION__ << std::endl;
这适用于GCC和Clang,并将显示函数/类实例化的模板参数。