ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

day01C++QT框架学习学习

2022-04-25 13:01:45  阅读:147  来源: 互联网

标签:执行 QT 对象 day01 C++ int 析构 btn 函数



#include<iostream>
#include<QDebug>
QPushButton * btn(对象名) = new QPushButton (新的对象)
qDebug() << "输出语句";

btn.show();
btn.setParent(this);
btn.move(int x, int y);//x轴坐标 y轴坐标
Widget.Fixedresize(int w, int h);//宽度weight、高度height

            QCreater
            /
           /
        Qwidget
        /    \
       /     \
       btn    MyButton
  //创建的时候由上往下进行new操作
  //点击“×”释放内存的时候是由先从下往上进行delect操作
  
  
  
  析构:
  在程序释放内存时,会可以构建析构从而在释放内存时先执行析构的内容然后再去执行。
  析构函数是特殊的类成员函数,简单来说,析构函数与构造函数的作用正好相反,它用来完成对象被删除前的一些清理工作,也就是专门的扫尾工作。如果构造函数打开了一个文件,最后不需要使用时文件就要被关闭,析构函数允许类自动完成类似清理工作,不必调用其他成员函数。
 按照这个逻辑在执行析构的顺序应该是先执行btn的析构,因为btn是最先被释放的,然后执行Qwidget的析构。
 逻辑没有错
 但是在执行析构的时候会先寻找对象树的祖先,从根节点开始执行,所以在执行析构时的顺序时跟new对象的顺序是一样的
 简而言之,在执行析构时会先执行Qwidget的析构,然后执行btn的析构函数。
 
 对象树
             QObeject
            /    |   \
           /     |   \
        QWidget   QWidget QWidget
        
  C++中规定了析构顺序应该按照其创建顺序的相反过程。那么问题来了,如果我们先创建了子对象,再创建的父对象,根据上述原理析构的时候先析构父对象,又因为Qt中的对象树自动析构原理,我们析构父对象会自动析构子对象。也就是说, 子对象此时就被析构了,然后代码继续执行,按照顺序还要再析构一次子对象,但是这时候已经是第二次调用 子对象的析构函数了,C++中不允许调用两次析构函数,因此,程序会崩溃。

 
 
 
 
 
 

标签:执行,QT,对象,day01,C++,int,析构,btn,函数
来源: https://www.cnblogs.com/orsrrc/p/16189794.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有