简体   繁体   中英

C++ custom allocator

Hi I have written a custom allocator with the help of some resources. It works fine for std::vector, list . However for std::unordered_map the constructor gets called twice . I am not why. Can someone please help me understand the static initialization that is happening. Here's the code

File: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;
   }


};

File: main.cpp

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

calling it that way makes the helper constrcutor get called twiced in the program. It doesn'y happen like that for vector. Is there something i am not understanding with regards to template initialization. Please help

Containers may create allocators not only for the type you provided, but also for different types via rebind . This is what apparently happens in your case. You didn't provide enough code so others can compile and check it, but you can add this in the constructor of helper :

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

This works in GCC and Clang and will show the template parameters the function/class was instantiated with.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM