...

/

Custom Memory Allocator

Custom Memory Allocator

Learn how to use a custom memory allocator with standard library containers in a simplified version.

Using a custom memory allocator with standard library containers

When trying out our custom memory manager with a specific type, it worked great! There is a problem, though. It turns out that the class-specific operator new is not called on all the occasions we might have expected. Consider the following code:

Press + to interact
main.cpp
arena.h
auto user = std::make_shared<User>();

What happens when we want to have a std::vector of 10 users?

Press + to interact
main.cpp
arena.h
auto users = std::vector<User>{};
users.reserve(10);

In neither of the two cases is our custom memory manager being used. Why? Starting with the shared pointer, we have to go back to the example earlier where we saw that std::make_shared() allocates memory for both reference counting data and the object it should point to. No way std::make_shared () can use an expression such as new User() to create the user object and the counter with only one allocation. Instead, it allocates memory and constructs the user object using placement new.

The std::vector object is similar. It doesn’t construct 1010 ...