Dom*_*old 2 qt memory-leaks memory-management
如果一个QObject是一个类的成员(不是用new-operator创建的)并且同时是一个类实例的子类,那么它应该被删除两次,因为类实例的所有子元素都被删除并且在该类的析构函数将删除所有类成员.因此,程序应该崩溃.但这不会发生,所以Qt必须以某种方式检测到这种双重关系.但这真的发生了吗?如果是,它是如何工作的?
这是一个例子:
class MyWindow : public QMainWindow {
Q_OBJECT
public:
MyWindow();
QLabel label;
};
MyWindow::MyWindow() : label(this) {}
Run Code Online (Sandbox Code Playgroud)
当一个实例MyWindow被销毁时,label应该删除两次,因为它是一个成员和一个孩子MyWindow.但这不会发生,这样做似乎是安全的.但它是如何工作的?
这种情况适用于这种情况,因为删除顺序: