我们应该在Qt中使用哪种内存管理方法
Which memory management method should we use in Qt?
我对编程很陌生,因为我仍在学习如何有效地编码,所以我的问题可能看起来有点奇怪。
当我学习如何用Qt编码时,我知道Qt有一种内存管理方法,当它本身被删除时,父级会删除它的所有子项,然后还有QSharedPointer
和许多其他智能指针的东西(或者你可能会提到boost::shared_ptr
(。
了解这两种方法的工作原理,但我的问题是,当涉及到Qt中整个系统结构的设计时,我应该将我的大部分类作为QObject
的子类并将所有权交给QT进行内存管理,还是简单地使用boost::shared_ptr
或QSharedPointer
东西来避免潜在的内存泄漏?
因为如果我们采用这两种技术,需要考虑很多问题,因为它可能会导致双重删除问题。
那么哪种技术在设计中具有更好的性能或哪种技术更好?
如您所知,Qt有一个模型:
QObjects 在对象树中组织自己。当您使用另一个对象作为父对象创建 QObject 时,它会添加到父对象的 sub(( 列表中,并在父对象时被删除。
此外:
您也可以自己删除子对象,这些子对象将从其父对象中删除自己。
正因为如此,只要你使用该模型,你就不会有双释放的问题。
也就是说,我见过并使用的一种常见方法(但请注意,这样做是有原因的(是创建两个层,前者是纯粹基于Qt的层,后者完全不知道Qt。当然,它需要一层薄薄的层来回翻译信息。
在这样的模型中,可以合理地看到两种方法都应用了,从不混合并且正常工作。
那么,哪个是最好的呢?这取决于您的目标。
在底层作为独立代码库的情况下,我使用了混合方法,在此基础上,我可以使用我的首选库创建界面,但我也想自由切换到 UI 的任何库。
如果不是这种情况,并且您的项目是纯粹基于Qt的项目,那么没有理由不将一切都基于Qt本身所基于的模型。
- 当vector是tje全局变量时,c++中vector的内存管理
- 我有一个线程 1:EXC_BAD_ACCESS(代码 = 1,地址 = 0x8)错误.我认为这是由于内存管理不好.我可以
- C++将字符串传递给 C 库以进行内存管理
- 从函数返回时C++内存管理
- 函数指针和 lambda 的内存管理
- 自定义内存管理器在发布模式下工作正常,但在调试模式下则不然
- C++中的内存管理
- C和C++中的内存管理有什么区别
- 字符 * 未从重载运算符或内存管理问题正确返回
- 如何在源代码中使用执行策略检测 C++17 的扩展内存管理算法的可用性?
- 底层指针和内存管理
- 智能指针,避免使用QNetworkAccessManager时进行手动内存管理
- c++中的内存管理问题
- 使用矢量时的内存管理
- 循环和内存管理中的指针算术C++?
- C++堆栈内存管理问题
- C 内存管理中的课程如何管理 - 研究
- 不可变数据模型的内存管理
- C++ 使用数组初始化时的 STL 向量内存管理
- SFML 纹理内存管理