该标准提供了模板专用化,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)还是有原因?
3 回答
天涯尽头无女友
TA贡献1831条经验 获得超9个赞
( std::unique_ptr<T[]>
存在)非常适合开销对您非常重要的情况。不像vector<T>
,unique_ptr<T[]>
不包括容量甚至大小的开销。客户端可能需要为大小增加外部开销,但是如果阵列从不调整大小,则不会增加容量。现在这并没有变得unique_ptr<T[]>
更好vector<T>
。确实,我认为前者的用例比后者要少。但是前者的用例率不为零。
摇曳的蔷薇
TA贡献1793条经验 获得超6个赞
该shared_ptr<T[]>
版本的优点在于,它只需要一个指针取消引用即可访问任何数组元素,而shared_ptr<vector<T>>
需要两个指针(一个指向,一个指向shared_ptr
存储在中的数组vector
)。
- 3 回答
- 0 关注
- 784 浏览
添加回答
举报
0/150
提交
取消