AQObject
はオブジェクト コンテナーです。含まれているオブジェクトはその子と呼ばれ、含まれているオブジェクトはそれらの子の親と見なされます。これ自体は、子がどのように割り当てられたかについては何も述べていません。C++11 でいくつかのシナリオを見てみましょう。
void test() {
QObject aParent;
// children of automatic storage duration
QObject aChild1{&aParent}, aChild2;
aChild2->setParent(&aParent);
// children of dynamic storage duration
auto aChild3 = new QObject{&aParent};
auto aChild4 = new QObject;
aChild4->setParent(&aParent);
}
struct Parent : QObject {
QObject aChild5 { this };
QObject * aChild6 { new QObject };
QObject notAChild;
Parent() { aChild6->setParent(this); }
};
このtest()
関数は、オブジェクトが自動および動的ストレージ期間のいくつかの子の親になる方法を示しています。親オブジェクトは、コンストラクターで、またはsetParent
メソッドの引数として指定できます。
このParent
クラスは、メンバー オブジェクトが親クラスの子になることができることを示していますが、必ずしもそうとは限りません。メンバー値は自動保存期間ですが、すべての子オブジェクトがそうであるわけではありません。が指すオブジェクトaChild6
は動的ストレージ期間です。QObject
はデストラクタ内のすべての子を削除するため、オブジェクトの有効な保存期間はaChild6
自動的に設定されます: オブジェクトを削除しなければならないことを心配する必要はありません。