您好,我借助一些资源编写了一个自定义分配器。它适用于 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/