J C*_*per 5 c++ qt memory-management
抱歉这个愚蠢的问题,但我是第一次使用Qt和C++,并完成了教程和一些示例.
提到的一件事是Qt的东西不需要被明确删除.所以,主要问题,这也适用于Qt的集合吗?就像说我想要一个动态数量的MyWidget
s,所以我保留了一个vector
或其中任何一个.他们还在照顾我吗?
作为一个附带问题,是什么让它成为我所以不必担心析构函数?
Qt内存管理模型基于父子关系.Qt类将可选parent
作为其构造函数的参数.新实例向此父项注册,以便在删除父项时删除它.如果您正在使用Qt集合(例如QList),我相信您可以将列表设置为其条目的父级.如果您使用的是std :: vector或其他集合类型,则不会获得"自动"内存管理.
Qt模型在UI层次结构中很有意义,它与UI层次结构一一对应.在其他情况下,它并不总是以干净的方式映射,您需要评估使用Qt系统是否对特定情况有意义.普通的C++工具仍然有效:您可以使用std :: tr1 :: shared_ptr或任何其他智能指针类来帮助您管理对象的生命周期.Qt还包括QPointer
,一个受保护的指针,并且QSharedPointer
/ QWeakPointer
对实现的引用-couting的智能指针和弱参考对.
Qt肯定有一个有趣的对象模型.当我第一次开始时,让我感到不安的是,有很多new Foo
电话而且没有电话delete
.
http://qt.nokia.com/doc/4.6/object.html是开始阅读对象模型的好地方.
感兴趣的事情:QObject子类的赋值和copy-ctor方法被禁用.对象子父项链由QObject内部维护.
通常在实例化QObject子类时(如果您不打算自己管理它的指针),您将提供另一个QObject指针作为父类.然后,这个"父母"接管您刚才所生的孩子的管理.您可以在QObject上调用setParent()来更改"拥有"它的人.Qt中很少有方法可以更改对象的父级,并且它们都明确声明它们在文档中完成.
所以回答你的具体问题:这取决于你如何制作所有的MyWidget实例.
如果你用父母制作每一个,那么你不必删除它们.父母将在删除后删除它们.
如果你保留了QList<MyWidget*>
它们的集合,并且你没有给它们父母,那么你应该自己删除它们.
归档时间: |
|
查看次数: |
801 次 |
最近记录: |