栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

qt quick析构时出现debug assertion failed

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

qt quick析构时出现debug assertion failed

调试时发现软件new的对象关闭时没有调用析构函数,发现一个删除对象的函数deleteLater(),在c++把它封装了一下,在界面关闭按钮下面使用。可以析构,但出现了debug assertion failed。先是以为deleteLater()函数放的位置不对,加断点调试发现和位置没关系,主线程还new了其它对象,先把所有创建的子线程都屏蔽掉,没有报错,一步步排查,发现问题出现在一个单例上:

this->m_updateGraph = UpdateGraph::instance();
this->m_updateGraph->moveToThread(&graphThread);
connect(&this->graphThread, &QThread::finished, this->m_updateGraph, &UpdateGraph::deleteLater);

经验丰富的已经发现问题了吧,我边查边试,不写成单例,直接new的话没有报错,越查越废,理论让我头秃。后来发现界面不调用deleteLater()函数不影响单例的析构,再看上面,单例的线程结束时连接了一个deleteLater函数,刚好长的一样哟。这个报错的原因是析构函数调用了2次造成的,果然把connect屏蔽掉就没有这个问题。
我理解的是,对象的爸爸都是QObject,单例parent析构时也会析构,new出现的不一样,需要手动delete,又自动又手动就出错了。又是秃了的一天。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/917334.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号