Qt内存管理

Qt memory management

本文关键字:管理 内存 Qt      更新时间:2023-10-16

请考虑以下代码片段:

1: QPushButton *p_Button = new QPushButton(this); 
2: QPushButton myButton(this); 

第 1 行被称为 QWidget,所以在我的示例中p_Button是 QWidget 的子级:当 QWidget 死亡(超出范围??)时,他的析构函数从堆中删除p_Button并调用 p_Button 的析构函数。

第 2 行:与第 1 行相同,但 QWidget 的析构函数是否删除了 myButton,因为它的子级也是 myButton?

如果我说错了什么,请纠正我并回答我的问题。

是的,是的。如果 QObject 不是由 new 创建的,则必须在其父级之前将其销毁。否则,父级将删除子项,程序可能会崩溃。

Qt有一些关于对象树和所有权的优秀文档来解释这一点。