6
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.

与 unique_ptr 相比,数组的 shared_ptr 签名是否有任何特定原因?

如果两个 api 都遵循类似的签名,那就更简单了。

4

1 回答 1

6

unique_ptr有一个明确的模板特化来处理数组对象。LWG(C++ 委员会图书馆工作组)简要地考虑了这种可能性,shared_ptr<T[]>显然它没有足够高的优先级使其成为标准,对于算法的后果也存在一些争议shared_ptr<T[]>

于 2013-10-06T10:09:40.530 回答