【发布时间】:2012-02-03 21:13:33
【问题描述】:
QT 编码中动态分配的指针是如何被销毁的,因为我们没有为它们编写特定的析构函数?
【问题讨论】:
-
你能举个例子吗?
QT 编码中动态分配的指针是如何被销毁的,因为我们没有为它们编写特定的析构函数?
【问题讨论】:
扩展Neox's answer,Qt有两种对象管理方法:
两者并没有很好地混合,原因显而易见。
QObjects 可以是“免费的”或有父级。当一个 QObject 有它的父集时(通过为 QObject 构造函数提供指向另一个 QObject 的指针,或者通过调用 setParent()),父 QObject 成为子 QObject 的所有者,并确保它的任何子 QObject 在它被销毁时被销毁是。还有几种方法可用于检查子/父关系。
管理动态分配对象的另一种方法是托管指针类,this paper 解释得很好。总结一下:
如您所见,一些受保护的指针类可以与 QObject 树一起使用,但您应该确保在这样做之前彻底阅读并理解文档,否则您可能会得到一个损坏的数据结构。
【讨论】:
简短的回答是:
QObjects 在对象树中组织自己。当您创建一个以另一个对象为父对象的 QObject 时,它会被添加到父对象的 children() 列表中,并在父对象存在时被删除。
Qt 有一个关于框架内对象层次结构和所有权的很好的文档。你可以阅读它here
【讨论】: