【发布时间】:2015-04-14 08:20:59
【问题描述】:
我试图理解下面代码 sn-p 中 lambda 表达式的含义。
lambda 表达式通过值而不是通过引用来捕获变量,否则当foo 退出时,局部变量message 将被销毁。
我不明白的是m_impl的捕获。如果Impl的copy ctor被删除了怎么按值捕获?请问有大神能指点一下吗?
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 删除了其复制构造函数和赋值运算符。
【问题讨论】:
-
我完全不确定,但我的猜测是它会被移动而不是复制,所以 m_impl 的原始“副本”在创建 lambda 后无效
-
按价值捕获的是
this,而不是您怀疑的m_impl。m_impl通过隐式this指针间接访问
标签: c++ c++11 lambda copy-constructor