如何向shared_ptr添加偏移量?

时间:2016-11-04 17:44:52

标签: c++ c++11

我试图为我的矩阵类创建一块内存,因为std::vector<std::vector<double>>没有提供我想要的性能。所以我决定使用单个1d阵列。所以我想到使用double的shared_ptr。

声明我做的变量:

std::shared_ptr<double> matrix;

为我声明的共享指针分配内存:

matrix = std::make_shared<double []> (row*col);

现在访问元素以将某些内容分配给矩阵中的特定位置:

*(matrix + r*col + c) = 0.0;

这给我错误说

`错误:'运算符+'不匹配(操作数类型为'std :: shared_ptr'和'size_t')

我以为我们可以在指针上使用+。为什么不让我为指针添加标量值?

1 个答案:

答案 0 :(得分:6)

std::shared_ptr不是指针,它是一个封装指针的类。这就是operator +无效shared_ptr

的原因

如果你有一个常规指针(double* matrix)那么一切都会好的。您可以使用get()

shared_ptr中获取常规指针

这会将您的代码更改为*(matrix.get() + r*col + c) = 0.0;

等效表达式为matrix.get()[r*col + c] = 0.0;

另一种存储数据的方法(如果你不想让它共享)就是使用std::vector

std::vector<double> matrix(row * col);
matrix[r * col + c] = 0.0;

使用向量在您进行调试构建时具有优势,operator []可以检查表达式r * col + c是否返回无效的索引(例如,如果r&gt; = col )