为什么没有std :: shared_ptr <t []>专门化?</t []>

时间:2012-01-20 20:38:24

标签: c++ c++11 shared-ptr

该标准提供了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的方式相同)或是否有原因?

1 个答案:

答案 0 :(得分:69)

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