代码之家  ›  专栏  ›  技术社区  ›  J Cooper

Qt中小部件集合的内存管理

  •  5
  • J Cooper  · 技术社区  · 16 年前

    提到的一件事是,Qt内容不需要显式删除。所以 主要问题 MyWidget s、 所以我有一个 vector 或者随便什么。他们还在帮我照顾吗?

    作为一个附带的问题,是什么让我不用担心析构函数?

    2 回复  |  直到 16 年前
        1
  •  5
  •   Trey Stout    16 年前

    Qt确实有一个有趣的对象模型。当我刚开始工作时,有这么多人让我感到不安 new Foo 电话和号码 delete S

    http://qt.nokia.com/doc/4.6/object.html

    感兴趣的事情: QObject子类禁用了赋值和复制方法。对象子父对象链由QObject在内部维护。

    通常,在实例化QObject子类时(如果您不打算自己管理其指针),您将提供另一个QObject指针作为父类。然后,这个“家长”将接管您刚生下的孩子的管理。您可以对QoObject调用setParent()来更改“拥有”它的人。Qt中很少有方法会更改对象的父对象,并且它们都在文档中显式地声明它们会这样做。

    如果每一个都有一个父对象,那么不需要删除它们。当父对象被删除时,它将删除它们。

    QList<MyWidget*> 如果你没有给它们一个父对象,那么你应该自己删除它们。

        2
  •  7
  •   Barry Wark    16 年前

    Qt记忆管理模型基于父子关系。Qt类采用可选的 parent

    Qt模型在UI层次结构中非常有意义,在UI层次结构中它与UI层次结构一一匹配。在其他情况下,它并不总是清晰地映射,您需要评估在特定情况下使用Qt系统是否有意义。普通C++工具仍然有效:可以使用STD::Tr1::SydDypTR或任何其他智能指针类来帮助管理对象生存期。Qt还包括 QPointer ,一个受保护的指针,以及 QSharedPointer / QWeakPointer