std::make_shared<> is just a wrapper over std::allocate_shared<> with the allocator defaulted to std::allocator<>.
Assuming there is a constructor A::A( int, const char*, double )
for A,
auto pa = std::make_shared<A>( 1, "hello", 22.8 ) ;
is more efficient when compared to
std::shared_ptr<A> pa( new A( 1, "hello", 22.8 ) ) ;
It requires only one memory allocation instead of two; storage for the objct and its shared reference count is allocated together.