0

我正在用 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]

当我尝试使用对象和不使用它(只需声明它)时,都会发生错误。你有什么想法,发生了什么。

主.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;在破坏按钮组期间使用 make 错误,所以这也很糟糕。

4

1 回答 1

2

Qt 的第一条规则(更准确地说,任何 QObject 派生类),永远不要在其上调用 delete。

因此,像您使用的基本 unique_ptr 可能是个坏主意,您要么必须编写自定义删除器来调用 deleteLater(),要么使用 Qt 自己的智能指针

https://wiki.qt.io/Smart_Pointers

即使这样,我也不认为它们提供与 QObject 派生类一起使用的智能指针。

Qt 有一个旧式的内存管理,所以它不能很好地与开箱即用的新标准东西混合。

于 2021-07-23T07:40:21.387 回答