查看完整版本: [-- pure virtual method called问题 --]

QTCN开发网 -> Qt基础编程 -> pure virtual method called问题 [打印本页] 登录 -> 注册 -> 回复主题 -> 发表主题

apud 2020-06-28 22:47

pure virtual method called问题

小白请教一个问题:按钮多次点击并发调用某个方法(如下:getTextContent),导致pure virtual method called。
原因大概是并发调用操作同一个类成员指针(因需在异步回调中进行deleteLater所以不能是局部申明的,受作用域影响),在某个操作中deleteLater之后,另一次操作又执行了某个虚函数但是指针已经被上一次操作析构了,导致的异常,这种情况要怎么处理呢?
除了限制单个请求还有其它办法吗?最好能支持同时并发调用。多谢!

伪代码如下:
void Form::getTextContent(){
    api = new HttpAPI();
    api->getTextContent([&](bool success, QList<QPair<int,QString>> list){
        //异步回调
        int error = -1;
        QString msg = "";
        if(success){
            QListIterator<QPair<int, QString> > iter(list);
            QPair<int, QString> pair;
            while (iter.hasNext())
            {
                pair = iter.next();
                error = pair.first;
                msg = pair.second;
            }

            if(error==0){
               //执行某些操作
            }
        }
        api->deleteLater();
    });
}

XChinux 2020-06-30 12:13
是否可以先processEvents(),将待处理消息完毕后,再判断能否进行调用。


查看完整版本: [-- pure virtual method called问题 --] [-- top --]



Powered by phpwind v8.7 Code ©2003-2011 phpwind
Gzip disabled