二:
三:
#include <iostream>
#include <list>
using namespace std;
class object //祖先类
{
public:
list<object*> child; //创建一个链表存储子组件地址
public:
object(object *parent=nullptr) //有参构造,如果没有给父组件,默认指向空
{
if(parent!=nullptr) //如果parent不指向空,说明给定了父组件,需要把自身地址加入到父组件的孩子链表中
{
parent->child.push_back(this);
}
}
virtual ~object() //自定义虚析构函数
{
for(auto p=child.begin();p!=child.end();p++) //从链表开头到结尾,释放掉每一个子组件
{
delete *p;
}
}
};
class A:public object
{
public:
A(object *parent=nullptr) //有参构造,如果没有给父组件,默认指向空
{
if(parent!=NULL)
{
parent->child.push_back(this); //parent不指向空,说明给定了父组件,需要把自身地址加入到父组件的孩子链表中
}
cout<<"A构造"<<endl;
}
~A()
{
cout<<"A析构"<<endl;
}
};
int main()
{
object obj;
A* a=new A(&obj);
return 0;
}