Search code examples
c++boostshared-ptrsmart-pointersmake-shared

What does "single allocation" mean for boost::make_shared


In the boost doc of make_shared, it says:

Besides convenience and style, such a function is also exception safe and considerably faster because it can use a single allocation for both the object and its corresponding control block, eliminating a significant portion of shared_ptr's construction overhead.

I don't understand the meaning of "single allocation", what does it mean?


Solution

  • An "allocation" means a block of memory obtained from a call to an allocator.

    Usually, creating a shared_ptr with the pointer constructor allocates memory for a "control block", which holds the reference count and the deleter. Copies of that shared_ptr all refer to the same control block, so that they share the reference count. Hence there are two allocations in total - the object itself and the control block created by shared_ptr.

    If you create the object and shared_ptr together with make_shared, then only one allocation is made. You can think of this as a single struct with two members:

    1. The object which is being managed
    2. The control block.