当前位置: 首页 > news >正文

厂家营销型网站建设帝国做的网站

厂家营销型网站建设,帝国做的网站,湖南建设信誉查询网站,列表怎么做网站一. QT对象树的概念 QObject 的构造函数中会传入一个 Parent 父对象指针,children() 函数返回 QObjectList。即每一个 QObject 对象有且仅有一个父对象,但可以有很多个子对象。 那么Qt这样设计的好处是什么呢?很简单,就是为了方…

一. QT对象树的概念

QObject 的构造函数中会传入一个 Parent 父对象指针,children() 函数返回 QObjectList。即每一个 QObject 对象有且仅有一个父对象,但可以有很多个子对象。

那么Qt这样设计的好处是什么呢?很简单,就是为了方便内存管理。在创建QObject对象时,可以提供一个父对象,我们创建的这个QObject对象会自动添加到其父对象的children()列表,当父对象析构的时候,这个列表的所有对象也会被析构当析构子对象的时候,会自动从父对象的子对象列表中删除。

当一个Q0bject对象在堆上创建的时候,Qt会同时为其创建一个对象树。不过,对象树中对象的顺序是没有定义的。这意味着,销毁这些对象的顺序也是未定义的。任何对象树中的Q0bject对象delete的时候,如果这个对象有 parent,则自动将其从parent的children()列表中删除;如果有孩子,则自动delete 每一个孩子。Qt 保证没有 Q0bject 会被 delete 两次,这是由析构顺序决定的。

如果 Q0bject 在栈上创建,Qt 保持同样的行为。正常情况下,这也不会发生什么问题。来看下下面的代码片段:

{QWidget window;QPushButton quit("Quit",&window);
}

作为父组件的 window 和作为子组件的 quit 都是 Q0bject 的子类(事实上,它们都是 QWidget 的子类,而 QWidget是Q0bject 的子类)。这段代码是正确的,quit 的析构函数不会被调用两次,因为标准 C++要求,局部对象的析构顺序应该按照其创建顺序的相反过程。因此,这段代码在超出作用域时,会先调用 quit的析构函数,将其从父对象window的子对象列表中删除,然后才会再调用window 的析构函数。

二. 使用纯C++实现QT对象树内存回收机制底层原理

#include <iostream>
#include <list>
using namespace std;
class Object;
typedef list<Object*> ObjectList;class Object
{
public:ObjectList children_List;Object(Object* parent = nullptr){if(parent != nullptr){parent->children_List.push_back(this);}}//为了保证使用多态时,子类对象无法释放的问题,所以加一个virtualvirtual ~Object(){for(auto it = children_List.begin(); it != children_List.end(); it++){delete *(it);}}
};class A : public Object
{
public:A(Object* parent = nullptr){if(parent != nullptr){parent->children_List.push_back(this);}cout<<"A gouzao"<<endl;}~A(){cout<<"A xigou"<<endl;}
};class B : public Object
{
public:B(Object* parent = nullptr){if(parent != nullptr){parent->children_List.push_back(this);}cout<<"B gouzao"<<endl;}~B(){cout<<"B xigou"<<endl;}
};int main()
{
//    Object obj;
//    A* a = new A(&obj);B b;A* a = new A(&b);//new A是一个继承的子类对象 b父类的指针 也就是b的孩子列表中装入了A这个对象 B和A不是继承关系,//不需要指针,也不需要delete,内存就能被完整的释放掉return 0;
}

virtual  为了保证使用多态时,子类对象无法释放的问题,所以加一个virtual

auto 是自动类型判断

http://www.yayakq.cn/news/582752/

相关文章:

  • 网页设计与网站建设景点介绍梅兰商贸网站开发设计
  • 手机app微信网站珠海响应式网站建设推广公司
  • 网站建设的通知网站维护分工怎样在浏览器上找网站
  • 祥云网站优化公司小程序定制开发
  • 南昌网站设计专业软件商城app下载安卓版
  • 网上做图赚钱的网站wordpress 搬家 500
  • 交换链接适用于哪些网站阿里巴巴国际站费用
  • 龙华建设网站公司鲜花网站开发与设计
  • 廊坊做网站优化的公司flask做大型网站开发
  • 南昌 网站建设网站建设公司-山而
  • 新手做网站推动高质量发展
  • 做网站用什么框架免费的ps软件
  • 网站icp备案查不到深圳做网站哪家好
  • 旅游网站作用搜索引擎推广有哪些平台
  • 公司网站开发费用入什么科目seo咨询推广
  • 网站备案可以强制撤销吗网页设计页面大小是多少
  • 怎么查看网站有没有做301兰州关键词优化效果
  • 不相关的网站做单项链接可以吗可以制作应用的软件
  • 新乡营销网站建设带孩子做网站
  • 网站设计与规划论文网站开发与服务合同
  • 宝安大型商城网站建设网站维护与建设
  • 服务器做网站上传快好还是下载快好网站颜色搭配
  • 合肥快速建站在线咨询如何招聘软件网站开发人员
  • 容桂低价网站建设描述个人网站的建站过程
  • 保健品网站建设背景wordpress3.6
  • 松江区网站建设招聘简历模板
  • 阿里云这么建设网站黄山旅游攻略住宿
  • 济南哪家公司做网站好申请建设工作网站的函
  • 百度地图网站后台更新成全视频观看技巧和方法
  • 温州网站建设 温州网站制作网站如何自己做seo