我有一个需要在lambda函数中分配一个唯一的ptr值的情况。
std::unique_ptr<SomeType> unique_ptr_obj;
// Lambda below has fixed return type.
bool var = ()[unique_ptr_obj=std::move(unique_ptr_obj)]-> bool {
unique_ptr_obj = GetUniqueObject();
return true
} ();
// Should be able to use unique_ptr_obj
UseUniqueObject(unique_ptr_obj.get());
然而,正如预期的那样,unique_ptr_obj
是nullptr,因为它被移到了lambda中。有没有一种方法可以从lambda中填充unique_ptr_obj
,并能够在以后重用它?
有什么建议吗?我应该把unique_ptr_obj
转换成shared_ptr
吗?
2条答案
按热度按时间toe950271#
你应该修改lambda的声明,通过引用来捕获
unique_ptr_obj
:2guxujil2#
你不想共享所有权,或者你想共享所有权,但这对lambda给
unique_ptr_obj
赋值没有帮助,因此使用shared_ptr
不是解决方案。你也不想从
unique_ptr_obj
移动。草率地说,从某个东西移动意味着让它处于空的状态。如果你想让一个函数修改它的参数,那么你可以通过引用传递;如果你想让一个lambda修改外部作用域中的某个东西,那么你可以让它通过引用捕获它。
无论是
int
还是unique_ptr
,这都是一样的: