2

我使用 Qt 设计器来设计 UI。在将设计实现到代码中时,我使用多重继承方法。我没有真正的理由使用这种方法,我只是发现它更容易。

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

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

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

4

2 回答 2

2

别担心……虽然 QT 的设计并不排除在堆栈上组装一组小部件。父小部件和子小部件之间存在所有权层次结构。父小部件拥有它的所有子小部件。如果分配没有以正确的顺序完成(首先是孩子),堆栈分配可能会破坏导致双重删除,请参阅有关此主题的QT 文档(@Subaru 挖掘此问题),对我个人而言,这样的警告通常意味着它不是真的一个好主意。由于这个原因,无法复制 Iirc 'QObject' 和 'QWidget' 。

于 2013-01-25T11:19:02.620 回答
2

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

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

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

于 2013-01-25T12:35:16.780 回答