该标准提供了
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)
shared_ptr::shared_ptr()