我们应该在Qt中使用哪种内存管理方法

Which memory management method should we use in Qt?

本文关键字:内存 管理 方法 管理方 Qt 我们      更新时间:2023-10-16

我对编程很陌生,因为我仍在学习如何有效地编码,所以我的问题可能看起来有点奇怪。

当我学习如何用Qt编码时,我知道Qt有一种内存管理方法,当它本身被删除时,父级会删除它的所有子项,然后还有QSharedPointer和许多其他智能指针的东西(或者你可能会提到boost::shared_ptr(。

了解这两种方法的工作原理,但我的问题是,当涉及到Qt中整个系统结构的设计时,我应该将我的大部分类作为QObject的子类并将所有权交给QT进行内存管理,还是简单地使用boost::shared_ptrQSharedPointer东西来避免潜在的内存泄漏?

因为如果我们采用这两种技术,需要考虑很多问题,因为它可能会导致双重删除问题。

那么哪种技术

在设计中具有更好的性能或哪种技术更好?

如您所知,Qt有一个模型:

QObjects 在对象树中组织自己。当您使用另一个对象作为父对象创建 QObject 时,它会添加到父对象的 sub(( 列表中,并在父对象时被删除。

此外:

您也可以自己删除子对象,这些子对象将从其父对象中删除自己。

正因为如此,只要你使用该模型,你就不会有双释放的问题。

也就是说,我见过并使用的一种常见方法(但请注意,这样做是有原因的(是创建两个层,前者是纯粹基于Qt的层,后者完全不知道Qt。当然,它需要一层薄薄的层来回翻译信息。
在这样的模型中,可以合理地看到两种方法都应用了,从不混合并且正常工作。

那么,哪个是最好的呢?这取决于您的目标。

在底层作为独立代码库的情况下,我使用了混合方法,在此基础上,我可以使用我的首选库创建界面,但我也想自由切换到 UI 的任何库。
如果不是这种情况,并且您的项目是纯粹基于Qt的项目,那么没有理由不将一切都基于Qt本身所基于的模型。