Are there any downsides with using make_shared<T>()
instead of using shared_ptr<T>(new T)
.
Boost documentation states
There have been repeated requests from users for a factory function that creates an object of a given type and returns a shared_ptr to it. 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. This eliminates one of the major efficiency complaints about shared_ptr.
In addition to the points presented by @deft_code, an even weaker one:
weak_ptr
s that live after all the shared_ptr
s to a given object have died, then this object's memory will live in memory along with the control block until the last weak_ptr dies. In other words the object is destroyed but not deallocated until the last weak_ptr
is destroyed.