如何将偏移量添加到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