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

时间:2015-12-24 16:26:15

标签: c++ qt boost smart-pointers qsharedpointer

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

当我学习如何使用Qt进行编码时,我知道Qt有一种内存管理方法,当父母删除它时,父母会删除所有孩子,然后QSharedPointer以及许多其他智能指针(或者你可以提到boost::shared_ptr)。

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

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

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

1 个答案:

答案 0 :(得分:4)

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

  

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

此外:

  

您也可以自己删除子对象,并将自己从父母身上删除。

因此,只要您使用该模型,您就不会遇到双重释放的问题。

那就是说,我见过和使用的一种常见方法(但要注意有理由这样做)是创建两层,前者是纯粹的基于Qt的层,后者完全是Qt-浑然不觉。当然,它需要一个薄层来回传递信息 在这样的模型中,可以合理地看到这两种方法都适用,从不混合并正确地工作。

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

我已经使用了一种混合方法,其中底层是一个独立的代码库,我可以使用我喜欢的库创建一个接口,但我也想自由切换到任何库用户界面。
如果情况并非如此,并且您的项目纯粹是基于Qt的项目,则没有理由不将所有内容都基于Qt本身所基于的模型。

相关问题