C++ 将lambda捕获站点构建的唯一_ptr移动到向量中失败

C++ 将lambda捕获站点构建的唯一_ptr移动到向量中失败,c++,lambda,C++,Lambda,我试图做的事的伪代码: 自动测试\u foo=[foo\u o1=make\u unique,&vectorofoo]{ auto foo_o2=使_独一无二; vectorofoo.push\u backsd::movefoo\u o2;//编译 vectorofoo.push\u backsd::movefoo\u o1;//错误:使用删除的函数unique\u ptrconst std::unique\u ptr& }; lambda的函数调用操作符在默认情况下是const限定的,因此复制

我试图做的事的伪代码:

自动测试\u foo=[foo\u o1=make\u unique,&vectorofoo]{ auto foo_o2=使_独一无二; vectorofoo.push\u backsd::movefoo\u o2;//编译 vectorofoo.push\u backsd::movefoo\u o1;//错误:使用删除的函数unique\u ptrconst std::unique\u ptr& };
lambda的函数调用操作符在默认情况下是const限定的,因此复制捕获的foo_o1在其内部是不可修改的

您可以将标记为可变:

可变:允许主体修改复制捕获的对象,并调用其非常量成员函数

例如


lambda的函数调用操作符在默认情况下是const限定的,因此复制捕获的foo_o1在其内部是不可修改的

您可以将标记为可变:

可变:允许主体修改复制捕获的对象,并调用其非常量成员函数

例如


请注意,两次调用test_foo将推后从foo_o1移动到nullptr。请始终将准确的错误消息与一起发布,这样问题就显而易见了。请注意,两次调用test_foo将推后从foo_o1移动到nullptr。请始终将准确的错误消息与一起发布,这样,问题就显而易见了
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
};