c++ - Qt 小部件内存管理

标签 c++ qt

所以我对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/

相关文章:

c++ - 为什么析构函数在这里被调用两次?

c++ - 套接字上的FTP写入错误的文件和不同大小的C++

c++ - 无法使用 Visual Studio 2019.7.2 编译虚幻引擎 4.25

ruby-on-rails - 如何配置 Bundler 以使用本地 gem 依赖项

C++ - Qt Creator 中的 Poco 库

python - 从控制台(Ctrl-C)终止时让我的 PyQt 应用程序退出的正确方法是什么?

c++ - 我正在寻找将游戏更新到 SDL 2.0 的步骤

c++ - 为什么 Singleton 是比 Global Objects 更好的选择

c# - 将 C++ 函数转换为 C#

c++ - 消除 QLabel 顶部的间隙