m0_66977425 2023-03-28 00:37 采纳率: 100%
浏览 77
已结题

c++函数中的lambda捕获列表的问题

在c++qt中遇到一个关于lambda引用捕获的问题;下面的QtWidgetsApplication1函数是析构函数,所属的类是创建窗口的类
在我建立的这个链接中用到lambda的引用捕获,我试图对新窗口w2和按钮btn进行引用,结果会报错访问冲突;

QtWidgetsApplication1::QtWidgetsApplication1(QWidget* parent)
    : QMainWindow(parent)
{
    MyPushButton* btn = new MyPushButton(this);
    NewWidget* w2 = new NewWidget;
    btn->setText("按钮");
    connect(btn, &MyPushButton::clicked, [&]() {
        if (btn->text() == "按钮")
        {
            w2->show();
            btn->setText("消解");
        }
        else
        {
            w2->close();
            btn->setText("按钮");
        }
     });
}

但当我不用lambda建立引用,直接在该函数中建立引用新窗口和按钮进行修改时,程序正常运行,这是为什么呢

QtWidgetsApplication1::QtWidgetsApplication1(QWidget* parent)
    : QMainWindow(parent)
{
    MyPushButton* btn = new MyPushButton(this);
    NewWidget* w2 = new NewWidget;
    btn->setText("按钮");
    MyPushButton*& p = btn;
    p->setText("修改后的按钮");
}
  • 写回答

3条回答 默认 最新

  • mideum 2023-03-28 15:49
    关注

    指针就应该用=啊,如果用引用,你引用的是临时创建的btn和w2变量,而这两个变量在构造函数结束后就销毁了,所以引用的对象就没了,如果用=则是取它们的值,也就是指针地址,还是有效的

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 4月6日
  • 已采纳回答 3月29日
  • 修改了问题 3月28日
  • 创建了问题 3月28日

悬赏问题

  • ¥15 下图接收小电路,谁知道原理
  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度
  • ¥30 关于#r语言#的问题:如何对R语言中mfgarch包中构建的garch-midas模型进行样本内长期波动率预测和样本外长期波动率预测
  • ¥15 ETLCloud 处理json多层级问题
  • ¥15 matlab中使用gurobi时报错
  • ¥15 这个主板怎么能扩出一两个sata口
  • ¥15 不是,这到底错哪儿了😭
  • ¥15 2020长安杯与连接网探