猿问

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

该标准提供了模板专用化,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)还是有原因?


芜湖不芜
浏览 785回答 3
3回答

天涯尽头无女友

(&nbsp;std::unique_ptr<T[]>存在)非常适合开销对您非常重要的情况。不像vector<T>,unique_ptr<T[]>不包括容量甚至大小的开销。客户端可能需要为大小增加外部开销,但是如果阵列从不调整大小,则不会增加容量。现在这并没有变得unique_ptr<T[]>更好vector<T>。确实,我认为前者的用例比后者要少。但是前者的用例率不为零。

摇曳的蔷薇

该shared_ptr<T[]>版本的优点在于,它只需要一个指针取消引用即可访问任何数组元素,而shared_ptr<vector<T>>需要两个指针(一个指向,一个指向shared_ptr存储在中的数组vector)。
随时随地看视频慕课网APP
我要回答