Qt中小部件集合的内存管理 对不起,我是第一个用QT和C++工作的,并且通过教程和一些样本。

Qt中小部件集合的内存管理 对不起,我是第一个用QT和C++工作的,并且通过教程和一些样本。,c++,qt,memory-management,C++,Qt,Memory Management,提到的一件事是,Qt内容不需要显式删除。那么,主要问题,这是否也适用于Qt资料的收集?比如说我想要一个动态数的MyWidgets,所以我保留了一个向量或者其他任何东西。他们还在替我照顾吗 作为一个附带问题,是什么让我不必担心析构函数呢?Qt内存管理模型基于父子关系。Qt类将可选的父类作为其构造函数的参数。新实例向该父实例注册,以便在删除父实例时将其删除。如果您使用的是Qt集合(例如QList),我相信您可以将列表设置为其条目的父项。如果您使用的是std::vector或其他集合类型,则无法实现“

提到的一件事是,Qt内容不需要显式删除。那么,主要问题,这是否也适用于Qt资料的收集?比如说我想要一个动态数的
MyWidget
s,所以我保留了一个
向量
或者其他任何东西。他们还在替我照顾吗


作为一个附带问题,是什么让我不必担心析构函数呢?

Qt内存管理模型基于父子关系。Qt类将可选的
父类
作为其构造函数的参数。新实例向该父实例注册,以便在删除父实例时将其删除。如果您使用的是Qt集合(例如QList),我相信您可以将列表设置为其条目的父项。如果您使用的是std::vector或其他集合类型,则无法实现“自动”内存管理


Qt模型在UI层次结构中很有意义,它与UI层次结构一一匹配。在其他情况下,它并不总是清晰地映射,您需要评估在特定情况下使用Qt系统是否有意义。普通C++工具仍然有效:可以使用STD::Tr1::SydDypTR或任何其他智能指针类来帮助管理对象生存期。Qt还包括
QPointer
、一个受保护的指针和
QSharedPointer
/
QWeakPointer
对,它们实现了一个引用关联智能指针和弱引用对。

Qt肯定有一个有趣的对象模型。当我刚开始工作时,有这么多新的Foo调用,没有
delete
s,这让我感到不安

是开始阅读对象模型的好地方

关注事项: QObject子类禁用了赋值和复制方法。对象子父对象链由QObject在内部维护

通常,在实例化QObject子类时(如果您不打算自己管理其指针),您将提供另一个QObject指针作为父类。然后,这个“家长”将接管您刚生下的孩子的管理。您可以对QoObject调用setParent()来更改“拥有”它的人。Qt中很少有方法会更改对象的父对象,并且它们都在文档中显式地声明它们会这样做

所以要回答您的具体问题:这取决于您如何制作所有MyWidget实例

如果每一个都有一个父对象,那么不需要删除它们。父项在被删除时将删除它们


如果您正在保留它们的
QList
集合,并且您没有给它们一个父对象,那么您应该自己删除它们。

您不能将Qt集合设置为对象的父对象。动态分配并具有父子关系的对象是QObject,它们将QObject/QWidgets子类作为父类。QList和其他集合类不从QWidget继承(扩展为QObject),因此不能将其设置为父类。