假使
QObject
派生对象时,必须使用动态分配,只需在容器中放置指针,因为此类对象具有唯一标识,因此禁止复制。在这种情况下,只复制指针,这只是一个整数,复制指针对它所指向的实际对象没有影响。对于动态分配的对象,您必须手动管理生存期,或者使用Qt的父/子功能让对象被其父对象“收集”。
存储在各种容器中的值可以是任何可分配的数据类型。要限定,类型必须提供默认构造函数
复制构造函数和赋值运算符。
这涵盖了大多数数据
您可能希望存储在容器中的类型,包括基本类型
类型(如int和double)、指针类型和Qt数据类型(如
QString、QDate和QTime,但不包括QObject或任何QObject
子类(QWidget、QDialog、QTimer等)。如果您尝试
实例化一个QList,编译器会抱怨
QWidget的复制构造函数和赋值运算符已禁用。
如上面引用的文本所示,当将实际实例放置在容器中时,将复制对象。在这种情况下,您不必手动删除任何内容,因为副本的源通常是本地对象,通常是临时对象,编译器将负责这些对象。
“Placement new”是一个C++特性,您可以使用它来指定对象在内存中构建的位置,但它会带来管理复杂性和一些限制。放置新的和内存池的好处很少超过复杂性的增加和灵活性的损失。