编程语言
首页 > 编程语言> > day01C++QT框架学习学习

day01C++QT框架学习学习

作者:互联网


#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