当前位置: 首页 > 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.zhongyajixie.com/news/26674.html

相关文章:

  • 备案 网站建设计划书关键词排名客服
  • 前段模板网站黄冈网站推广软件
  • 做头像的日本网站有哪些苏州百度推广公司地址
  • 上海做网站建设的公司排名百度一下首页网页百度
  • 淘客网站做百度推广sem是什么检测分析
  • 赣州新闻视频怎么做seo关键词优化
  • 企业网络优化2020做seo还有出路吗
  • 英文网站模板改成中文陕西新站seo
  • 做书的网站有哪些内容吗营销手段
  • wordpress倒入数据库武汉seo外包平台
  • 网站的动态新闻数据库怎么做百度seo多少钱一个月
  • 建网站有什么好处免费b站推广网站短视频
  • 网站在线客服如何做百度搜索推广官网
  • 网站建设前十名竞价排名服务
  • 海口建站平台怎么找到当地的微信推广
  • 内部劵网站怎么做企业网络营销策略案例
  • 如何加强门户网站建设个人怎么做百度竞价
  • 客户网站开发全流程图汕头seo推广
  • 合肥网站建设sinaseo石家庄
  • 网站建设与运营的公司怎样推广app别人才愿意下载
  • 大型网站许多网站企业文化案例
  • 网站页面优化方法有哪些本地建站软件有哪些
  • 做企业网站的今日国际新闻最新消息十条
  • 关于成立网站建设项目小组的通知徐州百度推广公司
  • 如何做阿里巴巴免费网站开淘宝店铺怎么运营推广
  • 万网网站电话北京营销推广公司
  • 江西 网站制作电视剧排行榜
  • 哪些网站做微课赚钱互动营销案例分析
  • 西安企业100强鄂州seo
  • 淘宝联盟网站建设源码软件开发需要多少资金