如何将偏移量添加到shared_ptr?

我试图为我的矩阵类创建单块内存,因为std::vector<std::vector<double>>没有提供我想要的性能。所以我决定使用单个1d数组。所以我想为这个使用double的shared_ptr。如何将偏移量添加到shared_ptr?

声明变量我做:

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

我们获得分配的东西到特定位置的元素:

std::shared_ptr<double> matrix;

要申报共享指针我没有分配内存在矩阵中:

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

这给了我错误说

'的错误:不对应的“运营商+”(操作数类型是“的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)

以上是 如何将偏移量添加到shared_ptr? 的全部内容, 来源链接: utcz.com/qa/266525.html

回到顶部