Qt中应该使用哪种内存管理方式?

Which memory management method should we use in Qt?

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

当我学习如何使用 Qt 编码时,我知道 Qt 有一种内存管理方法,父级删除它自己时删除它的所有子级,然后有 QSharedPointer 等等智能指针的东西(或者你可能会提到 boost::shared_ptr)。

我明白这两种方法究竟是如何工作的,但我的问题是,当涉及到 Qt 中整个系统结构的设计时,我是否应该将我的大部分 class 作为 class 的子class QObject 并将所有权移交给 QT 来进行内存管理,或者简单地使用 boost::shared_ptrQSharedPointer 来避免潜在的内存泄漏?

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

那么哪种技术性能更好,或者哪种技术在设计上更好?

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

QObjects organize themselves in object trees. When you create a QObject with another object as parent, it's added to the parent's children() list, and is deleted when the parent is.

此外:

You can also delete child objects yourself, and they will remove themselves from their parents.

正因为如此,只要你使用那个模型,你就不会出现双重释放的问题。

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

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

如果底层是作为独立代码库,我可以使用我喜欢的库在其上创建接口,但我也想自由切换到UI.
的任何库 如果不是这种情况,并且您的项目是纯粹基于 Qt 的项目,则没有理由不将所有内容都基于 Qt 本身所基于的模型。