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基类

  • 相关阅读:
    PHP数组、函数
    PHP 基本内容
    Swift基础--tableview练习
    iOS 协议delegate分六步
    UI09_UITableView 使用 单例
    css清除浮动float的三种方法总结,为什么清浮动?浮动会有那些影响?一起来$('.float')
    CSS 如何使DIV层水平居中
    HTML转义字符大全
    jQuery选择器总结
    jQuery 学习笔记_01
  • 原文地址:https://www.cnblogs.com/chechen/p/8662154.html
Copyright © 2011-2022 走看看