传递矩阵`shared_ptr <vector <vector <t>&gt;的行`(* sp)[i]` sp`到一个接受`shared_ptr <vector <t>&gt;`的函数

时间:2015-08-07 15:52:22

标签: c++ c++11 smart-pointers

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

一个选项是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) { }));

2 个答案:

答案 0 :(得分:5)

使用别名构造函数。

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

答案 1 :(得分:0)

听起来你最好的选择就是

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

或者

B)使用std :: move将您的shared_ptr移动到foo,然后确保在通话结束后不引用sp。

就像昆汀所说的那样,你当前的设置是不可能的。