如何将 unique_ptr 捕获到 lambda 表达式中?

How to capture a unique_ptr into a lambda expression?(如何将 unique_ptr 捕获到 lambda 表达式中?)

本文介绍了如何将 unique_ptr 捕获到 lambda 表达式中?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我尝试了以下方法:

std::function<void ()> getAction(std::unique_ptr<MyClass> &&psomething){
    //The caller given ownership of psomething
    return [psomething](){ 
        psomething->do_some_thing();
        //psomething is expected to be released after this point
    };
}

但它不编译.有什么想法吗?

But it does not compile. Any ideas?

更新:

建议,需要一些新语法来明确指定我们需要将所有权转移到 lambda,我现在正在考虑以下语法:

AS suggested, some new syntax is required to explicitly specify we need to transfer the ownership to the lambda, I am now thinking about the following syntax:

std::function<void ()> getAction(std::unique_ptr<MyClass> psomething){
    //The caller given ownership of psomething
    return [auto psomething=move(psomething)](){ 
        psomething->do_some_thing();
        //psomething is expected to be released after this point
    };
}

它会是一个好的候选人吗?

Would it be a good candidate?

更新 1:

我将展示我对 movecopy 的实现如下:

I will show my implementation of move and copy as following:

template<typename T>
T copy(const T &t) {
    return t;
}

//process lvalue references
template<typename T>
T move(T &t) {
    return std::move(t);
}

class A{/*...*

本文标题为:如何将 unique_ptr 捕获到 lambda 表达式中?

基础教程推荐