ksl*_*ksl 1 c++ lambda copy-constructor c++11
我试图在下面的代码片段中理解lambda表达式的含义.
lambda表达式按值而不是通过引用捕获变量,否则message在foo退出时会破坏局部变量.
我不明白的是捕获m_impl.如果Impl删除了复制文件,如何通过值捕获?请有人开导我吗?
void Foo::foo(std::shared_ptr<std::string> message)
{
    m_impl->m_thread.send([=] { m_impl->handleMessage(message); });
}
handleMessage 声明为:
void handleMessage(std::shared_ptr<std::string> message)
并m_impl作为:
std::unique_ptr<Impl> m_impl;
Impl 删除了其复制构造函数和赋值运算符.
可以捕获的东西是:
this指针按值.虽然捕获this有效地通过引用捕获它们,但不会捕获成员变量.通过指定捕获默认值,this如果您引用lambda正文中的任何类成员,则将捕获,允许访问该成员.
据推测,m_impl是一个成员变量,这就是这里发生的事情.