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

0xb*_*00d 3 c++ smart-pointers c++11

对于某些人,我有一个std::shared_ptr<std::vector<std::vector<double>> sp并且需要传递给接受a 的函数.我怎样才能做到这一点?(*sp)[i]ifoostd::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) { }));
Run Code Online (Sandbox Code Playgroud)

T.C*_*.C. 5

使用别名构造函数.

foo(std::shared_ptr<std::vector<double>>(sp, &(*sp)[i]));
Run Code Online (Sandbox Code Playgroud)

  • 当子行正在使用时,这不会使父矩阵保持活动状态.而且,如果你不希望函数影响它的参数的生命周期,你不应该首先传递`shared_ptr` (2认同)