如何解决unique_ptr 和错误:运行时检查失败 #2 - 围绕变量“w”的堆栈在 QT 中已损坏
我正在用 QT 编写一个应用程序。我想使用QButtonGroup
,所以我在用户界面类的头文件中声明它:
std::unique_ptr<QButtonGroup> examTypeSelectGroup;
Run-Time Check Failure #2 - Stack around the variable 'w' was corrupted.
在main.cpp文件的最后一行,这是一个项目的mian文件。发生错误时的调用堆栈只有main()
:
> OCT_main.exe!main(int argc,char * * argv) Line 14
[External Code]
错误发生在我尝试使用对象和不使用它时(只需声明它)。 你知道发生了什么吗。
main.cpp:
1 #include "oct_main.h"
2
3 #include <QApplication>
4
5 int main(int argc,char *argv[])
6 {
7 QApplication a(argc,argv);
8
9 //run window
10 OCT_main w;
11 w.show();
12
13 return a.exec();
14 }
编辑:在销毁按钮组期间使用 QButtonGroup examTypeSelectGroup;
会出错,所以这也是不好的方式。
解决方法
Qt 的第一条规则(更准确地说,任何 QObject 派生类),永远不要对其调用 delete。
因此,像您使用的基本 unique_ptr 可能是个坏主意,您要么必须编写自定义删除器来调用 deleteLater(),要么使用 Qt 自己的智能指针
https://wiki.qt.io/Smart_Pointers
即便如此,我也不认为它们提供了与 QObject 派生类一起使用的智能指针。
Qt 具有旧式的内存管理,因此它不能很好地与开箱即用的新标准内容混合。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。