【发布时间】:2012-01-20 20:38:24
【问题描述】:
该标准提供了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)还是有原因?
【问题讨论】:
-
注:基于 Boost 中的工作,有一个为 C++17 添加此功能的新提案,请参阅open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3640.html
-
请注意,在使用数组时应该禁用许多
shared_ptr机制,例如引用子对象的能力。
标签: c++ c++11 shared-ptr