In a post I wrote few days ago titled “A word on std::shared_ptr” I was mistakenly arguing that, should the
std::shared_ptrfail 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
Tsucceeded, 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
Twould 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
Twill in fact be deleted.
Since learning of this mistake, I have taken down that post and redirected the original URL here, 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.
thanks for that information