访问shared_ptr

时间:2015-06-11 12:03:04

标签: c++

#include <memory>

int main()
{
   std::shared_ptr<double> array (new double [256], [](double * d){
      delete [] d;
   });
}

我做了一个shared_ptr指向一个双打数组,它有自己的自定义删除器。

现在我该如何访问数组?假设我希望在索引1访问该数组。我尝试了通常的“括号方法”,但是我收到了错误。

默认情况下,单词array指向其第一个元素,但如果我想访问第二个元素该怎么办?使用增量和括号使我“错误的操作员”错误。

有人可以向我解释一下发生了什么事吗?

我问这个用于研究目的,尽管我知道unique_ptrvector会做得更好。

2 个答案:

答案 0 :(得分:10)

括号表示法被定义为使用指针类型(并且你是正确的,给定数组array,表达式array衰减到具有指向第一个元素的类型的表达式)但是,尽管有其功能, std::shared_ptr不是指针类型

您必须obtain the raw pointer first

array.get()[n];

其中n当然是有效的数组下标。

std::unique_ptr也是如此(虽然请注意,in that case, you do not need to supply your own deleter!)。

答案 1 :(得分:0)

在C ++ 17中,像在unique_ptr(c ++ 11)中一样,支持shared_ptr数组。

int main()
{

   std::shared_ptr<double[]> array1 (new double [3]{4,5,6}, [](double * d){
   delete [] d;});

   std::unique_ptr<double[]> array2 (new double [3]{4,5,6}, [](double * d){
   delete [] d });
}