私は 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 App Store (OSX) の品質チェックに合格することができました。何が起こっているのですか?この現象をどう説明すればいいですか?メモリリークがなければ、リークオブジェクトのメッセージは表示されないはずですが、正しいですか?Qt5.0.2のバグですか?