[英]Why isn't there a std::shared_ptr<T[]> specialisation?
该标准提供了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[]>
提案中的功能,但该功能可能已经被抛弃( shared_ptr<T[]>
算术)。
但是最终,真正的真正原因是尽管进行了讨论,但在LWG面前从来没有一个实际的书面提案可以做到这一点。 它从来没有冒充任何人的优先级列表(包括我自己的优先级),以至于没有时间花时间编写提案。
最近,一些LWG成员之间就这个话题开始了非正式的对话,我亲自制作了原型。 但是仍然没有书面建议。 我认为这将是工具箱中不错的附加工具。 任何人都猜测它是否会真正发生。
更新资料
数组对shared_ptr
支持现在有一个草稿TS:
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4077.html
更新(2017)
C ++ 17现在支持此功能。 请参阅shared_ptr::shared_ptr()
情况3
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.