vkn*_*vkn 0 c++ lambda capture unique-ptr
考虑以下:
unique_ptr<int> foo = make_unique<int>(42);
auto lambda = [bar = move(foo)]()
{
/* Do something with bar */
};
lambda(); // No issues invoking this
cout << "*foo = " << *foo; //Attempts to dereference foo will segfault
Run Code Online (Sandbox Code Playgroud)
捕获诸如unique_ptr之类的东西需要使用std :: move,以保持unique_ptr的唯一性。但是,当我想在销毁lambda之后使用同一智能指针时该怎么办?使用foo将产生段错误,并且bar超出了该范围。
也许撇开lambda的非正统用法,我如何找回unique_ptr?它会永远被困在lambda中吗?
这可以通过引用捕获来解决。
auto lambda = [&]()
{
/* Do something with foo */
};
// or
auto lambda = [&foo]()
{
/* Do something with foo */
};
Run Code Online (Sandbox Code Playgroud)
允许您使用foo,而无需实际移动它。
唯一需要注意的是,要确保lambda的寿命不超过指针的寿命。如果可以,那么您应该考虑使用共享所有权方法,例如使用a std::shared_ptr。
| 归档时间: |
|
| 查看次数: |
44 次 |
| 最近记录: |