When exactly does the std::shared_ptr take ownership?

In a post I wrote few days ago titled “ A word on std::shared_ptr ” I was mistakenly arguing that, should the std :: shared_ptr fail to allocate its control block (where the reference count and other information is stored), the passed raw pointer would not be deleted. Example:

auto p = std :: shared_ptr < T > ( new T ) ;

Here, if the allocation and construction of T succeeded, the code would then enter shared pointer’s constructor. Inside this constructor the allocation of the control block would take place. If that failed, I argued, the newly allocated instance of T would leak. That is not what actually happens!

After re-reading the C++ specification , and looking over the shared pointer’s implementation supplied with Visual Studio 2017, it is now clear to me that the allocated instance of T will in fact be deleted.

Since learning of this mistake, I have taken down that post and redirected the original URLhere, where I take a more in-depth look at the std :: shared_ptr .

I would like to thank the kind people on reddit for taking the time to set me straight ! It was both a humbling and an embarrassing experience, but I am a better C++ programmer because of it.