3

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

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

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

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

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

4

1 回答 1

4

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

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

而且:

您也可以自己删除子对象,它们会将自己从父对象中删除。

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

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

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

在底层作为独立代码库的情况下,我使用了混合方法.
如果不是这种情况,并且您的项目是纯粹基于 Qt 的项目,那么没有理由不将所有内容都基于 Qt 本身所基于的模型。

于 2015-12-24T16:48:02.297 回答