を漏らす可能メモリを含むすべてのリソースを解放する必要がありほぼ最小限のQtプログラムは、次のとおりです。私は期待最小限のQtのプログラムがメモリはここ
LEAK SUMMARY:
definitely lost: 979 bytes in 24 blocks
indirectly lost: 7,858 bytes in 56 blocks
possibly lost: 912 bytes in 19 blocks
still reachable: 75,719 bytes in 1,080 blocks
of which reachable via heuristic:
newarray : 832 bytes in 16 blocks
suppressed: 0 bytes in 0 blocks
Rerun with --leak-check=full to see details of leaked memory
:
#include <QApplication>
#include <QMainWindow>
#include <memory>
int main(int argc, char** argv) {
QApplication app(argc, argv);
std::unique_ptr<QWidget> wnd{new QWidget()};
wnd->show();
return app.exec();
}
しかし、valgrind
はと言います「間違って失われた」と「間接的に失われた」のためにゼロを得るが、失われたバイトを持っている。どうして? valgrind
の出力が間違っていると解釈するのですか、Qtの終了機能を追加する必要がありますか?
あなたはコードが過剰です。正当な理由がない限り、ウィジェット/ 'QObject'をポインタで保持しないでください。 'QWidget'は他のすべてのPIMPL使用Qtオブジェクトと同様に、' void * 'のサイズです。 **値で**保持する。 –
はい、Qtはメモリをリークします。なぜなら、処理を終了するときにCPUサイクルを解放すると、CPUサイクルが浪費するからです。限り、私は懸念している、それはより多くの方法をリークする必要があります:これらの割り当て解除のすべてが無駄です。解放されていない割り当てをValgrindの例外として追加する必要があります。これらは一回限りの割り当てであり、時間とともに累積されません。起動時に発生し、完全に正常です。 –