#include <memory>

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

我做了一个shared_ptr指向一个具有自己的自定义删除程序的 double 数组。

现在如何访问阵列?假设我希望访问索引为1的数组。我尝试了通常的“括弧方法”,但出现错误。

单词array默认指向其第一个元素,但是如果我想访问第二个元素怎么办?使用增量和括号给我“运算符(operator)不匹配”错误。

有人可以向我解释幕后情况吗?

尽管出于了解unique_ptrvector会做得更好的目的,但我还是出于研究目的而要求这样做。

最佳答案

括号符号被定义为与指针类型配合使用(并且您很正确,给定数组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!)。

07-24 09:45
查看更多