为了账号安全,请及时绑定邮箱和手机立即绑定

为什么没有std :: shared_ptr <T []>专业化?

为什么没有std :: shared_ptr <T []>专业化?

C++
芜湖不芜 2019-10-21 12:33:58
该标准提供了模板专用化,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>。确实,我认为前者的用例比后者要少。但是前者的用例率不为零。

查看完整回答
反对 回复 2019-10-21
?
摇曳的蔷薇

TA贡献1793条经验 获得超6个赞

shared_ptr<T[]>版本的优点在于,它只需要一个指针取消引用即可访问任何数组元素,而shared_ptr<vector<T>>需要两个指针(一个指向,一个指向shared_ptr存储在中的数组vector)。

查看完整回答
反对 回复 2019-10-21
  • 3 回答
  • 0 关注
  • 784 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信