是否可以通过在lambda中捕获它并延长lambda的寿命来延长unique_ptr
的寿命?
我尝试过使用a=move(a)
表达式获取语法错误。
#include <cstdio>
#include <functional>
#include <memory>
#include <iostream>
using namespace std;
struct A {
A() { cout << "A()" << endl; }
~A() { cout << "~A()" << endl; }
};
int main() {
std::function<void ()> f;
{
std::unique_ptr<A> a(new A());
f = [a=move(a)] () mutable { return; };
}
return 0;
}
答案 0 :(得分:1)
您的代码问题是select Id,Firstname,Mark1,Mark2,Mark3
from
(select Id,Firstname,Null as Mark1,Null as Mark2,Null as Mark3 from Parent
union
select Id,Null as Firstname,Mark1,Mark2,Null as Mark3 from Child
union
select Id,Null as Firstname,Null as Mark1,Null as Mark2,Mark3 from Mark)t
group by Id,Firstname,Mark1,Mark2,Mark3
。它不是非常友好,因为它需要它的callable是可复制的/可分配的,而你的lambda不是因为在你的例子中只使用了一个移动类型std::function
。
有许多示例可以为您提供unique_ptr
的移动友好版本。
我来这里的时候有一个快速,笨拙,可能容易出错,但是“在我的机器上工作”的版本相同:
std::function
自己尝试一下: http://coliru.stacked-crooked.com/a/60e1be83753c0f3f