我是 mac 和仪器的新手,我用它来测试我的 Qt 应用程序,我发现了很多泄漏的对象,几乎所有这些对象都来自 Qt lib。我非常仔细地检查了我的代码,但找不到问题。为了避免内存泄漏的问题,我严格遵守 RAII 的规则,总是让类处理资源,确保每个小部件都有一个父级,那些没有父级(意图)的小部件将由智能指针或 Qt::WA_DeleteOnClose 保护。
为了修复内存泄漏警告,我编写了一个非常简单的 Qt 应用程序并将其用作测试,仪器总是显示我有一些内存泄漏(如图),即使是我创建的最简单的 Qt 应用程序。
#include <QApplication>
#include <QLabel>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QLabel w;
w.resize(320, 240);
w.show();
return a.exec();
}
仪器图表
我稍微修改了代码,然后看到 Instruments 显示的内存泄漏是否会持续上升。
#include <QApplication>
#include <QLabel>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
for(size_t i = 0; i != 100; ++i){
QLabel w;
w.resize(320, 240);
w.show();
}
QLabel w;
w.resize(320, 240);
w.show();
return a.exec();
}
内存泄漏确实增加了,我强烈希望这是仪器的错误,否则我不得不退回到Qt4(我不知道它是否会出现同样的问题)。我认为这并不简单应用程序可以通过mac应用商店(OSX)的质量检查。这是怎么回事?我应该如何解释这种现象?如果没有内存泄漏,我应该看不到泄漏对象的任何消息,对吗?Qt5.0.2的一个bug?