C++ QT中的动态内存释放
QT编码中动态分配的指针是如何销毁的,因为我们没有为它们编写特定的析构函数 简单的回答是: QoObject在对象树中组织它们自己。当您创建一个以另一个对象为父对象的QObject时,它将添加到父对象的子对象()列表中,并在创建父对象时删除 Qt对框架内的对象层次结构和所有权有很好的说明。您可以阅读它展开,Qt有两种对象管理方法:C++ QT中的动态内存释放,c++,qt,C++,Qt,QT编码中动态分配的指针是如何销毁的,因为我们没有为它们编写特定的析构函数 简单的回答是: QoObject在对象树中组织它们自己。当您创建一个以另一个对象为父对象的QObject时,它将添加到父对象的子对象()列表中,并在创建父对象时删除 Qt对框架内的对象层次结构和所有权有很好的说明。您可以阅读它展开,Qt有两种对象管理方法: QObject树结构 托管指针类 而这两者并没有很好地结合,原因很明显 s可以是“免费”的,也可以有父级。当一个QObject设置了其父对象(通过向QObject构造
setParent()
)时,父QObject将成为子QObject的所有者,并确保在创建时销毁其任何子QObject。还有几种方法可用于检查子/父关系
管理动态分配对象的另一种方法是托管指针类,它解释得很好。总结一下:
- “该类存储指向动态分配对象的指针,并在销毁时将其删除”,因此,当您需要具有明确且明显的所有权和生存期的对象时,该类非常有用
- “该类持有对共享指针的强引用,[并且]如果没有其他QSharedPointer对象引用它,它将在超出范围时删除它所持有的指针”,因此在所有权不明确时是好的,但您希望确保它不会丢失并成为内存泄漏。可用于共享指针,而不表示任何所有权
正如您所看到的,一些受保护的指针类可以与QObject树一起使用,但在这样做之前,您应该确保彻底阅读并理解文档,否则可能会导致数据结构损坏。您能举个例子吗?您能推荐一本学习QT的书吗?它为像我这样的初学者提供了基础知识。我有C++ GUI编程,用QT4的书,但没有提供太多的帮助!你不需要一本书:使用Qt文档!先看一下下面的例子。把你的手放在手边,查你不懂的东西。我建议也使用QtCreator,只需按CTRL+K并键入“?”即可在QtCreator中搜索Qt文档。