我是mac和乐器的新手,我用它来测试我的Qt应用程序,我发现了很多泄漏的对象,几乎所有这些都来自Qt lib。我检查我的代码非常小心,但可以'找到问题。为了避免内存泄漏的问题,我严格遵守RAII的规则,总是让类处理资源,确保每个小部件都有父级,没有父级(意图)的小部件将通过智能指针或Qt :: WA_DeleteOnClose保护。 / p>
要修复内存泄漏警告,我会编写一个非常简单的Qt应用程序并将其用作测试, 仪器总是表明我有一些内存泄漏(如图)甚至是最简单的 我创建的Qt app。
#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(而且我不知道它会有同样的问题).I 不要以为这个简单的应用程序可以通过mac app store(OSX)的质量检查。 发生了什么?我该怎么解释这个现象?如果没有内存泄漏,我应该 没有看到泄漏对象的任何消息,我是否正确?Qt5.0.2的错误?
答案 0 :(得分:2)
内存确实被泄露,可信框架永远不会泄露。
基本上,框架应该使用智能指针,或者应该追踪并“手动”处理违规内存泄漏。
如果没有泄漏,则使用后所有内存都将返回堆中。
根据bugreports.qt-project.org/browse/QTBUG-7505,此错误发布在4.6.0版本中。