如何为shared_ptr添加偏移量

How to add offset to shared_ptr?

本文关键字:ptr 添加 偏移量 shared      更新时间:2023-10-16

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

声明变量:

std::shared_ptr<double> matrix;

为声明的共享指针分配内存,我这样做:

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

现在来访问元素,将值赋给矩阵中的特定位置:

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

这给了我错误说

' error: no match for 'operator+'(操作数类型为'std::shared_ptr'和'size_t ')

我想我们可以使用+指针。为什么它不允许我向指针添加标量值?

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>= col)