贵州省建设职业技术学院网站,网站开发的经济效益分析,北京小程序网站制作,毕业设计做系统和网站有什么区别文章目录 对象树是什么使用对象树的好处使用c实现对象树 对象树是什么 我们常常听到 QObject 会用对象树来组织管理自己#xff0c;那什么是对象树#xff1f; 这个概念非常好理解。因为 QObject 类就有一个私有变量 QListQObject *#xff0c;专门存储这个类的子… 文章目录 对象树是什么使用对象树的好处使用c实现对象树 对象树是什么 我们常常听到 QObject 会用对象树来组织管理自己那什么是对象树 这个概念非常好理解。因为 QObject 类就有一个私有变量 QListQObject *专门存储这个类的子孙后代们。比如创建一个 QObject 并指定父对象时就会把自己加入到父对象的 childre() 列表中也就是 QListQObject * 变量中。
使用对象树的好处 好处就是当父对象被析构时子对象也会被析构。 举个例子有一个窗口 Window里面有 Label标签、TextEdit文本输入框、Button按钮这三个元素并且都设置 Window 为它们的父对象。这时候我做了一个关闭窗口的操作作为程序员的你是不是自然想到将所有和窗口相关的对象析构啊古老的办法就是一个个手动 delete 呗。是不是很麻烦Qt 运用对象树模式当父对象被析构时子对象自动就 delete 掉了不用再写一大堆的代码了。 所以对象树在 GUI 编程中是非常非常有用的。
使用c实现对象树 我们知道Qt对象在创建的时候都可以指定一个父指针Qt就是通过这个操作将子对象添加到父对象的容器中进行管理当父对象析构的时候就会遍历这个容器对子对象进行析构这样子的话用户就不需要自己进行析构子对象。 #include iostream
#include list
using namespace std;
class Object;
typedef listObject * ObjectList;class Object
{
public:ObjectList children_list;Object(Object *parent nullptr){if(parent){parent-children_list.push_back(this);}}virtual ~Object(){for(auto it children_list.begin();it ! children_list.end();it){delete *it;}}
};class A:public Object
{
public:A(Object *parent):Object(parent){coutA的构造函数被执行了endl;}~A(){coutA的析构函数被执行了endl;}
};class B:public Object
{
public:B(Object *parent):Object(parent){coutB的构造函数被执行了endl;}~B(){coutB的析构函数被执行了endl;}
};int main()
{Object obj;A *a new A(obj);return 0;
} 当obj对象析构后a对象不需要进行delete就可以自动进行析构。