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

建手机网站教程配件网站模板

建手机网站教程,配件网站模板,镇江网页设计实战班,php mysql wordpress一. 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/424623/

相关文章:

  • 链家网站谁做的洞口网站开发公司
  • 为公司制作网站优秀网站网址
  • ps怎么做网站首页厦门高端网站案例
  • 国外服务器做网站保定网站推广公司
  • 为什么网站打不开网站建设 交单流程
  • 互站网源码商城莱芜网络推广公司哪里找
  • 做阿里国际网站多少钱建设网站的好处和优点
  • 网站建设的客户都在哪里wordpress管理员 404
  • 深圳商城网站设计价格山东app网站制作
  • 做历史课件用哪个网站比较好移动端网站开发公司
  • 网站联盟的基本流程自学ui设计需要哪些资料
  • 济南汽车网站设计开发公司建酒店科目
  • 电商网站搭建企业网站空间多大
  • 更换网站后台番禺区pc端网站建设
  • 百度关键词查询网站沈阳企业网站模板建站
  • 小白怎么建设网站广州市新闻发布会
  • 四位一体网站开发上海金山网站建设公司
  • 公司网站优势中国能建电子商务平台
  • 如何做电子海报在网站wordpress制作购物网站
  • 滨海县做网站注册淘宝小程序代驾平台
  • 山东鲁为建设集团网站作图在线制作
  • 网站运营 流程wordpress 中文杂志主题
  • 株洲在线论坛伴你生活每一天衡阳网站优化免费咨询
  • 南宁品牌网站建设美工免费素材网站
  • 娄底高端网站建设服务器租用网站
  • 商用图片素材网站重庆的网络优化公司
  • 最好的app制作网站柳州人社app下载
  • 科技部网站建设合同wordpress 访问页面
  • 做企业网站的费用挂什么科目怎么建网站教程图解
  • 先进的网站开发技术晋江网络推广公司