std::unique_ptr<int[]> p(new int[10]); //ok
std::shared_ptr<int[]> p(new int[10]); //Error
shared_ptr<int> sp( new int[10],[](int *p){delete [] p;});
//Ok, writing custom deleter for
//array since shared_ptr will call
//delete by default.
Is there any specific reason shared_ptr signature is different for arrays when compared to unique_ptr?
It would have been simpler if both api followed similar signature.
unique_ptr
has an explicit template specialization to handle array objects. The LWG (Library Working Group of the C++ committee) briefly considered the possibility of shared_ptr<T[]>
but apparently it wasn't of sufficiently high priority to make it into the standard, there was also some controversy over the consequences of the arithmetic on shared_ptr<T[]>
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With