Custom Memory Allocator
Learn how to use a custom memory allocator with standard library containers in a simplified version.
We'll cover the following...
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:
auto user = std::make_shared<User>();
What happens when we want to have a std::vector
of 10 users?
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 ...