繁体   English   中英

为什么没有std :: shared_ptr <T[]> 专业化?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM