gpt4 book ai didi

c++ - Lambda 按值捕获和不可复制的对象

转载 作者:太空宇宙 更新时间:2023-11-03 10:43:16 24 4
gpt4 key购买 nike

我试图理解以下代码片段中 lambda 表达式的含义。

lambda 表达式通过值而不是引用捕获变量,否则局部变量 messagefoo 退出时被销毁。

我不明白的是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 有效地通过引用捕获了它们。通过指定捕获默认值,如果您引用 lambda 主体中的任何类成员,this 将被捕获,从而允许访问该成员。

据推测,m_impl 是一个成员变量,所以这就是这里发生的事情。

关于c++ - Lambda 按值捕获和不可复制的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29622410/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com