为什么没有std :: shared_ptr <T >专精?

该标准提供了std::unique_ptr的模板专门化,它从析构函数中正确地调用了delete[]

 void func() { std::unique_ptr< int[] > arr(new int[10]); ....... } 

使用std::shared_ptr这个专门化是不可用的,所以有必要提供一个正确调用delete[]

 void func() { // Usage shared_ptr array (new double [256], [](double* arr) { delete [] arr; } ); .............. } 

这只是一个疏忽吗? (以同样的方式,有一个std::copy_if )或有一个原因?

LWG(C ++委员会图书馆工作组)简要地考虑了这种可能性,但这个想法并非没有争议。 虽然争议主要是关于一个被添加到shared_ptr<T[]>build议的function,可能已经被抛弃(在shared_ptr<T[]>上运算)。

但最终真正的原因是虽然讨论过,但在LWG面前从来没有一个真正的书面提案来做这件事。 它从来没有冒充任何人的优先列表(包括我自己的),足以把时间写入提案。

最近在几个LWG成员之间就这个话题重新进行了非正式对话,我亲自对它进行了原型devise。 但是还没有提出书面build议。 我认为这将是一个体面的工具箱中的附加工具。 是否会真的发生是否有人猜测。

更新

shared_ptr数组支持现在有一个草稿TS:

http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4077.html

更新(2017)

现在在C ++ 17中支持这一点。 请参阅shared_ptr::shared_ptr()案例3