将矩阵“shared_ptr<vector<vector<T>> sp”的一行“(*sp)[i]”传递给接受“shared_ptr<vector<T>>”的函数

Passing a row `(*sp)[i]` of a matrix `shared_ptr<vector<vector<T>> sp` to a function which accepts a `shared_ptr<vector<T>>`

我有一个 std::shared_ptr<std::vector<std::vector<double>> sp 并且需要将 (*sp)[i] 对于某些 i 传递给接受 std::shared_ptr<std::vector<double>> 的函数 foo。我该怎么做?

一个选项是 foo(std::make_shared<std::vector<double>>((*sp)[i]),但这会创建向量的副本 (*sp)[i]。由于 (*sp)[i] 可能很大,我绝对不希望这种情况发生。

那么,是否有任何选项可以在不复制的情况下将 (*sp)[i] 传递给 foo

编辑:也许我们可以做以下事情:

foo(std::shared_ptr<std::vector<double>>(&(*sp)[i], [](std::vector<double>* p) { }));

使用别名构造函数。

foo(std::shared_ptr<std::vector<double>>(sp, &(*sp)[i]));

听起来你最好的选择是

A) 更改 foo 以接受对 shared_ptr 的引用,这将消除按值传递。

B) 使用 std::move 将你的 shared_ptr 移动到 foo 中,然后确保你在调用后不引用 sp。

正如 Quentin 所说,否则您当前的设置是不可能的。