zoukankan      html  css  js  c++  java
  • QT笔记之内存管理

     转载:https://blog.csdn.net/myjqc/article/details/8569196 (链接错误解决办法)

    我们都知道在C++中,new和delete是成对出现的,那么在QT中内存中是不是同样如此呢,我们来验证一下。

    第一步新建工程: MyWidget

     第二步:添加一个自定义的按钮类(MyButton)

    第三步:修改自定义按钮类的父类为QPushButton(QPushButton也是继承自QWidget),同时自定义按钮类添加析构函数,并在析构函数里打印输出

    mybutton.h

    #ifndef MYBUTTON_H
    #define MYBUTTON_H
    
    #include <QPushButton>
    
    class MyButton : public QPushButton
    {
        Q_OBJECT
    public:
        explicit MyButton(QWidget *parent = 0);

        ~MyButton();
    
    signals:
    
    public slots:
    
    };
    
    #endif // MYBUTTON_H

    mybutton.cpp

    #include "mybutton.h"
    #include <QDebug>
    
    MyButton::MyButton(QWidget *parent) :
        QPushButton(parent)
    {
    }
    
    MyButton::~MyButton()
    {
        qDebug() << "析构函数被调用了";
    }

    第四步:在主窗口上创建显示

    #include "mywidget.h"
    #include "mybutton.h"
    
    MyWidget::MyWidget(QWidget *parent)
        : QWidget(parent)
    {
        MyButton *pBtn = new MyButton(this);
        pBtn->setText(QStringLiteral("我是动态创建的按钮,我不手动释放"));
    }
    
    MyWidget::~MyWidget()
    {
    
    }

    第五步:开始调试,发生了链接错误

    原因是moc没有更新,无论怎么重新构建,清理,构建都不行,用一个笨办法解决了:就是删除项目同名文件夹下的调试文件夹

    然后重新调试运行,成功了

    第六步:关闭窗口,程序退出,看自定义按钮类的析构函数是否被调用

     可以看到打印出了 析构函数被调用。因此我们总结出,在QT中,有它自己的内存回收机制,但也是有前提条件的:

    1.动态创建的对象必须指定父对象

    2.动态创建的对象直接或者间接继承于QObject基类

  • 相关阅读:
    优化!优化!
    JavaScript 错误
    js 学习总结
    JavaScript join() 方法
    JavaScript shift() 方法
    JavaScript split() 方法
    arTemplate解析语法
    getTime 方法
    PHP 5 数据类型
    thinkphp 实现微信公众号开发(二)--实现自定义菜单
  • 原文地址:https://www.cnblogs.com/chechen/p/8662154.html
Copyright © 2011-2022 走看看