代码段加注释
#include <iostream>
#include<list>
using namespace std;
class A
{
public:
list<A *> child; //创建一个链表
public:
A(A *parent= nullptr)
{
if(parent !=nullptr) //说明有父组件
{
parent->child.push_back(this); //有父组件就将该类成员附到父组件的child链表中
}
cout<<"是A类构造" <<endl;
}
virtual ~A() //定义一个虚析构函数,将所有的子组件释放,他之后的所有子类都会调用此析构函数
{
for(auto p = child.begin(); p!=child.end(); p++)
{
delete *p;
}
cout <<"是A类析构" <<endl;
}
};
class B:public A
{
public:
B(A *parent= nullptr) //即是有参构造也是无参构造,当传参为空为无参,不为空为有参
{
cout <<"是B类构造" <<endl;
if(parent !=nullptr) //说明有父组件
{
parent->child.push_back(this); //有父组件就将该类成员附到父组件的child链表中
}
}
virtual ~B() //定义一个虚析构函数,将所有的子组件释放,他之后的所有子类都会调用此析构函数
{
cout <<"是B类析构" <<endl;
}
};
class C:public A
{
public:
C(A *parent= nullptr) //即是有参构造也是无参构造,当传参为空为无参,不为空为有参
{
if(parent !=nullptr) //说明有父组件
{
parent->child.push_back(this); //有父组件就将该类成员附到父组件的child链表中
}
cout <<"是C类构造" <<endl;
}
virtual ~C() //定义一个虚析构函数,将所有的子组件释放,他之后的所有子类都会调用此析构函数
{
cout <<"是C类析构" <<endl;
}
};
int main()
{
cout << "Hello World!" << endl;
B w;
C *s=new C(&w);
return 0;
}
运行状态