#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类的对象当做父组件
// B bb;
// A *p=new A(&bb);
return 0;
}
22081-11-14 对象树模型
于 2022-11-14 20:17:12 首次发布
![](https://img-home.csdnimg.cn/images/20240711042549.png)