所以我对Qt的内存管理有点迷惑。我在查看开始的示例和教程时看到了这个
QApplication app(argc, argv);
QWidget window;
QLabel *label = new QLabel(QApplication::translate("windowlayout", "Name:"));
QLineEdit *lineEdit = new QLineEdit();
QHBoxLayout *layout = new QHBoxLayout();
layout->addWidget(label);
layout->addWidget(lineEdit);
window.setLayout(layout);
window.setWindowTitle(
QApplication::translate("windowlayout", "Window layout"));
window.show();
return app.exec();
这很好,只是当他们创建新的小部件时我没有看到任何内存释放,现在这只是为了教程,所以他们不会混淆人们,或者内存管理由 Qt 自动处理。因为看着这个,我不得不相信存在内存泄漏,因为没有任何东西被释放。
最佳答案
Widget 被它们的父级销毁(例如,当您调用 layout->addWidget
时,layout 获取传递的 widget 的所有权),当它们被销毁时。在你的情况下, window
将在范围的末尾被销毁(当 app.exec
返回时),这反过来会破坏布局,而布局又会破坏标签和编辑框。
Object Trees & Ownership在 Qt 文档中。
关于c++ - Qt 小部件内存管理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8000249/