为什么Qt设计器生成的对象总是在堆中分配?

时间:2013-01-25 11:10:24

标签: c++ qt qt-designer

我使用Qt设计器来设计UI。在将设计实现到代码中时,我使用multiple inheritance approach。我没有使用这种方法的真正原因,我发现它更容易。

无论如何,当我查看生成的头文件时,我注意到在setupUi()函数中,所有内容都在堆中分配。我真的不需要对象比父对象更长,根据this,在我的情况下,它不应该在堆中分配。

在父对象只是在堆栈中分配的小模式对话框的情况下,它的UI对象是否在堆中分配不是一种浪费吗?

有解决办法吗?我应该停止担心吗?我没有发现这已经成为一个问题,但我仍然对此感到好奇。事实上,这根本不是问题。我只是想知道。

2 个答案:

答案 0 :(得分:2)

不要担心......虽然QT的设计并不排除在堆栈上组装一组小部件。父窗口小部件和子窗口小部件之间存在所有权层次结构。父窗口小部件拥有其所有子项。堆栈分配可能会破坏导致双重删除的情况,如果分配没有按正确顺序完成(子项优先),请参阅QT documentation关于此主题(@Subaru挖出这个),个人对我这样的警告通常意味着这不是一个好主意。 Iirc' QObject'和' QWidget'因此原因无法复制。

答案 1 :(得分:2)

一般Qt实践是对任何QObject使用堆分配,除非它的生命周期仅限于当前范围。这可能看起来很浪费,但在构建UI的背景下,任何性能影响都可以忽略不计。

另请注意,由于Qt广泛使用了pimpl习语,每个创建的QObject都有一个内部QObjectPrivate,它始终是堆分配的,因此根本无法将所有内容保留在堆栈中。

所以我建议你不要担心。 :)