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