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都遵循类似的签名,那会更简单。
答案 0 :(得分:6)
unique_ptr
具有explicit模板专门化来处理数组对象。 LWG(C ++委员会图书馆工作组)简要地考虑了shared_ptr<T[]>
的可能性,但apparently它没有足够高的优先级使其成为标准,对后果也存在一些争议对shared_ptr<T[]>