为什么没有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