#include <memory>
int main()
{
std::shared_ptr<double> array (new double [256], [](double * d){
delete [] d;
});
}
我做了一个
shared_ptr
指向一个具有自己的自定义删除程序的 double 数组。现在如何访问阵列?假设我希望访问索引为
1
的数组。我尝试了通常的“括弧方法”,但出现错误。单词
array
默认指向其第一个元素,但是如果我想访问第二个元素怎么办?使用增量和括号给我“运算符(operator)不匹配”错误。有人可以向我解释幕后情况吗?
尽管出于了解
unique_ptr
和vector
会做得更好的目的,但我还是出于研究目的而要求这样做。 最佳答案
括号符号被定义为与指针类型配合使用(并且您很正确,给定数组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!)。