1

考虑以下代码段:

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?

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

4

1 回答 1

2

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

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

于 2012-11-22T23:12:44.170 回答