Qt编程--发现小知识点,析构Object类时,自动析构其子对象
来源:互联网 发布:python exit code 0 编辑:程序博客网 时间:2024/05/19 03:42
在学习Qt时,发现,构造一个QObject对象A,并把另一个QObject对象B作为A的父对象传入,当析构对象A时,对象B也将被自动析构。
验证如下:
testobject1.h
#ifndef TESTOBJECT1#define TESTOBJECT1#include <QObject>class TestObject : public QObject{ Q_OBJECTpublic: explicit TestObject(QString objectName, QObject* parent = 0); ~TestObject(); QString m_ObjectName;};#endif // TESTOBJECT1
testobject1.cpp
#include "testobject1.h"#include <QDebug>TestObject::TestObject(QString objectName, QObject* parent) :QObject(parent){ m_ObjectName = objectName; qDebug()<<m_ObjectName<<"enter constuctor";}TestObject::~TestObject(){ qDebug()<<m_ObjectName<<"leave constuctor";}
mainWindow.h
#ifndef MAINWINDOW_H#define MAINWINDOW_H#include <QMainWindow>#include "testobject1.h"namespace Ui {class MainWindow;}class MainWindow : public QMainWindow{ Q_OBJECTpublic: explicit MainWindow(QWidget *parent = 0); ~MainWindow();private: Ui::MainWindow *ui; TestObject* m_testObject1; TestObject* m_testObject2;public slots: void destroyTheObject();};#endif // MAINWINDOW_H
mainWindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QDebug>
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
//以下操作证明,将对父象传进去后,当父对象被析构时,其子对象也将被自动析构, 但不会自动为其赋NULL值。
m_testObject1 = new TestObject("object1", this);
m_testObject2 = new TestObject("object2", m_testObject1);
connect(m_testObject2, &TestObject::destroyed, this, this->destroyTheObject);
// if(m_testObject1)
// {
// delete m_testObject1;
// }
// if(NULL != m_testObject1)
// {
// qDebug()<<"the pointer of m_testObject1 is not null";
// }
// else
// {
// qDebug()<<"the pointer of m_testObject1 still null";
// }
// if(NULL != m_testObject2)
// {
// qDebug()<<"the pointer of m_testObject2 is not null";
// }
// else
// {
// qDebug()<<"the pointer of m_testObject2 still null";
// }
ui->setupUi(this);
}
MainWindow::~MainWindow()
{
qDebug()<<"enter the main window destry function.";
delete ui;
if(NULL != m_testObject1)
{
qDebug()<<"the pointer of m_testObject1 is not null";
}
else
{
qDebug()<<"the pointer of m_testObject1 still null";
}
if(NULL != m_testObject2)
{
qDebug()<<"the pointer of m_testObject2 is not null";
}
else
{
qDebug()<<"the pointer of m_testObject2 still null";
}
}
void MainWindow::destroyTheObject()
{
if(m_testObject2)
{
qDebug()<<"make m_testObject2 to NULL";
m_testObject2 = NULL;
}
}
运行结果:
"object1" enter constuctor
"object2" enter constuctor
enter the main window destry function.
the pointer of m_testObject1 is not null
the pointer of m_testObject2 is not null
"object1" leave constuctor
"object2" leave constuctor
make m_testObject2 to NULL
0 0
- Qt编程--发现小知识点,析构Object类时,自动析构其子对象
- Qt简单编程--小知识点
- Qt 小知识点总结
- Qt小知识点
- QT开发小知识点
- Qt小知识点
- Qt小知识点
- Qt编程知识点记录
- C#对象小知识点
- 嵌入式编程小知识点
- Java编程小知识点
- Qt遍历子对象
- java类和对象学习笔记(三)发现了一个小知识点——对象数组
- QT小知识点(7)
- QT小知识点(2)
- QT小知识点(1)
- Qt中的c++小知识点
- QT小知识点(8)
- MFC中修改控件的文字和颜色
- pthread_once()函数详解
- JDBC基础
- C#界面设计之TabControl控件的使用
- Mybatis最入门---ResultMaps实例篇(一对多查询)
- Qt编程--发现小知识点,析构Object类时,自动析构其子对象
- Android--JNI编程详解
- 宏碁V3-572G-51MR安装CUDA5.5失败
- 绘图机制
- java获取propertites文件
- 动态规划 DP问题
- 关于block使用导致键盘的延时操作
- bzoj 3209: 花神的数论题 数位dp
- Kafka的设计思想、理念