我有一个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) { }));
答案 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。
就像昆汀所说的那样,你当前的设置是不可能的。