make_shared
должен выделить две вещи: строящийся объект и блок управления shared_ptr
. Чтобы повысить производительность, он выделяет один кусок памяти, достаточно большой для обоих, а затем размещает их в новостях.
make_unique
не нужно этого делать, поскольку unique_ptr
не нуждается в блоке управления.
Если вы хотите контролировать, как выделяется память для объекта, управляемого shared_ptr
, создайте соответствующий класс распределителя и используйте allocate_shared
вместо make_shared
.