Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Why does shared_ptr signature differ from unique_ptr for arrays?

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.

like image 450
shivakumar Avatar asked Oct 06 '13 09:10

shivakumar


1 Answers

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[]>

like image 174
Gearoid Murphy Avatar answered Oct 26 '22 09:10

Gearoid Murphy