1.关于QT的一个重要机制的对象树机制的c++代码
#include <iostream>
#include <list>
using namespace std;
class Object; //前置声明类
typedef list<Object *> ObjectList; //类型重定义
class Object
{
public:
ObjectList children; //记录子组件的指针
Object(Object * parent = nullptr)
{
if(parent != nullptr)
{
//说明该组件有父组件,那么,其父组件就有children链表
//我们就要将该组件的地址放入父组件的孩子链表中,以便于
//析构父组件时,将子组件也进行析构
parent->children.push_back(this);
}
}
//析构函数
virtual ~Object()
{
for(auto it=children.begin();it!=children.end();it++)
{
delete *it;
}
}
ObjectList & childrenList()
{
return this->children;
}
};
//定义测试的子类
class A:public Object
{
public:
A(Object *parent = nullptr)
{
//判断该组件是否设置父组件
if(parent != nullptr)
{
parent->children.push_back(this);
}
cout<<"A::构造函数"<<endl;
}
~A()
{
cout<<"A::析构函数"<<endl;
}
};
class B:public Object
{
public:
B(Object *parent = nullptr)
{
//判断该组件是否设置父组件
if(parent != nullptr)
{
parent->children.push_back(this);
}
cout<<"B::构造函数"<<endl;
}
~B()
{
cout<<"B::析构函数"<<endl;
}
};
int main()
{
A aa;
B *p = new B(&aa); //定义一个b类的组件,将a类的对象当作父组件
return 0;
}