将在lambda捕获站点构建的unique_ptr移动到向量中失败

我试图做的虚拟代码:

auto test_foo = [foo_o1 = make_unique<Foo>(), &vectorOfFoo]() {
    auto foo_o2 = make_unique<Foo>();
    vectorOfFoo.push_back(std::move(foo_o2)); //COMPILES
    vectorOfFoo.push_back(std::move(foo_o1)); //ERROR: use of deleted function unique_ptr(const std::unique_ptr<_Tp, _Dp>&)
};

回答

默认情况下,lambda 的函数调用运算符是 const 限定的,因此foo_o1被复制捕获的内容在其中是不可修改的。

您可以将lambda标记为mutable

mutable: 允许body修改copy捕获的对象,并调用它们的非常量成员函数

例如

auto test_foo = [foo_o1 = make_unique<Foo>(), &vectorOfFoo]() mutable {
    auto foo_o2 = make_unique<Foo>();
    vectorOfFoo.push_back(std::move(foo_o2)); //COMPILES
    vectorOfFoo.push_back(std::move(foo_o1)); //COMPILES
};


以上是将在lambda捕获站点构建的unique_ptr移动到向量中失败的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>