#include<iostream>
#include <list>
class Object;
typedef std::list<Object*> ObjectList;
//基类
class Object {
public:
Object(Object* parent = nullptr) {
std::cout << "基类的构造函数" << std::endl;
if (parent != nullptr) {
std::cout << "添加children" << std::endl;
parent->mChildrenList.push_back(this);
}
}
virtual ~Object() {
std::cout << "基类析构函数" << std::endl;
if (!mChildrenList.empty()) {
for (auto c : mChildrenList) {
delete c;
}
}
}
public:
ObjectList mChildrenList;
};
class A : public Object {
public:
A(Object* parent = nullptr) : Object(parent) {
std::cout << "A的构造函数" << std::endl;
}
~A() {
std::cout << "A的析构函数" << std::endl;
}
};
class B : public Object {
public:
B(Object* parent = nullptr) : Object(parent) {
std::cout << "B的构造函数" << std::endl;
}
~B() {
std::cout << "B的析构函数" << std::endl;
}
};
int main() {
B b;
A* a = new A(&b);
return 0;
}
在堆区的数据不需要在手动释放了,绑定父对象自动释放。