代码之家  ›  专栏  ›  技术社区  ›  BЈовић

创建和释放Qt小部件对象

  •  7
  • BЈовић  · 技术社区  · 14 年前

    我听说小部件应该在堆上分配(使用new),然后就不需要删除它们(它是自动完成的)。

    1. 有人能解释为什么吗?
    2. 如果小部件不是这样分配的,而是在堆栈上分配的,会发生什么情况?

    我不确定这是否重要,但是我创建的所有小部件都有一个父部件。

    This 说:

    如果parent为0,则新小部件将变为 一扇窗户。如果父组件是另一个小部件, 此小部件成为子窗口 在父母内部。新的小部件是 删除其父级时删除。

    2 回复  |  直到 11 年前
        1
  •  21
  •   Etienne de Martel    14 年前

    没有魔法。简单地说,QObject会自动删除其析构函数中的子对象。所以,只要你的小部件有一个父部件并且你销毁了那个父部件,你就不必担心这些子部件。所以如果你想知道那是什么 QObject * parent 参数,这就是它的作用。

    另外,从文件:

    将删除所有子对象。如果这些对象中的任何一个在堆栈或全局上,程序迟早会崩溃。

    因此,避免将父对象赋给堆栈分配的对象。

        2
  •  3
  •   Steve Townsend    14 年前

    上面的文件是 here . 它们最常被分配到堆上的原因是为了避免由对象树成员的构造顺序引起的问题。只要你遵守规则,堆栈就可以了,但是当你有一个可靠的替代方案时,为什么还要费心呢?

    引用的参考文献@Etienne是 here .