错误记录:lambda 中使用中遇到的坑爹错误

   FtpManager * p = new FtpManager(this);
     p->SetHost("127.0.0.1", 21);
    p->SetUserName("anonymous");
    p->SetPwd("");
    p->SetPort(21);
    ui->tableWidget->setRowCount(1);
    ui->tableWidget->setColumnCount(3);

    QPushButton * btn = new QPushButton();
    connect(btn, &QPushButton::clicked,[&] (){

         p->S_uloadFile("F://test1.zip","test1.zip",false);
    });
    btn->setText("开始");
    ui->tableWidget->setCellWidget(0, 1, btn);

1、上面的代码老是异常中断,应该是局部变量 p 提前释放了。

解决:

使用静态局部变量。

2、里面只能执行一条语句

p->S_uloadFile("F://test1.zip","test1.zip",false);

前面或者后面加一条语句,都会报错

比如这样:不知道什么原因。。。

 connect(btn, &QPushButton::clicked,[&, s, btn] (){


         p->S_uloadFile(s,"test1.zip",false);
         btn->setText("暂停");
});

解决办法:

如上图,其他变量使用值传递就不报错,不知道这是为什么

3

感觉使用静态局部变量不是长久之计啊,静态局部变量好像不能手动释放。。。

现在用来C++14里的 move可以搞定,但是感觉兼容性会有问题

如下:

  connect(btn, &QPushButton::clicked, this, [=, p = std::move(p)] (){

后面没变。

原来这个方法是C++11里的,但是我不是很懂为什么这样就解决了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值