22081-11-14 对象树模型

这篇博客探讨了C++中类的层级结构和内存管理。`Object`类通过`children`列表维护了一个子组件的链表,并在析构时自动删除所有子组件。`A`和`B`类作为`Object`的派生类,展示了如何在构造和析构过程中管理对象关系。博客还展示了如何在创建`B`对象时将其添加到`A`对象的子组件列表中,从而实现对象的自动销毁。
摘要由CSDN通过智能技术生成
#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;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值