qt delete

学习C++的童鞋都知道new和delete必须是同时出现的,否则就会导致内存泄露。但是qt的提供了一种对象间的父子关系机制,组织成了一棵树,当delete一个对象的时候,qt的这种机制保证会自动的把它所有子对象delete。
qt的实现机制是这样的:在每一个Qt对象中,都有一个链表,这个链表保存有它所有子对象的指针。当创建一个新的Qt对象的时候,如果把另外一个Qt对象指定为这个对象的父对象,
那么父对象就会在它的子对象链表中加入这个子对象的指针。另外,对于任意一个Qt对象而言,在其生命周期的任何时候,都还可以通过setParent函数
重新设置它的父对象。当一个父对象在被delete的时候,它会自动的把它所有的子对象全部delete。当一个子对象在delete的时候,会把它自己
从它的父对象的子对象链表中删除。
可能很多初学者会很迷惑赢什么时候delete,什么时候不用delete,下边我就简单的说下我总结下来的规则:
1、没有父窗口的对象需要在合适的时机delete,而含有父窗口的对象不需要delete
2、如果想手动delete,其实也可以,规则如下:手动delete调用需要满足,delete的时候父窗口没有被delete,原因无它,当一个对象delete时,它会从父类的指针列表中将自己移除,以后当窗口delete时,就不会再delete该窗口;如果delete子对象的时候父对象已执行完delete,则会出现中断,可以参考:Qt中的new和delete。
qt delete的更多相关文章
- Qt 窗口属性简介之Qt::WA_DeleteOnClose
一.简述 今天介绍一个简单的窗口属性——Qt::WA_DeleteOnClose. 在正常创建窗口后,我们一般会调用close()方法来关闭窗口,这里我们看一下Q助手中关于close()方法的介绍. ...
- qt 单文档程序关闭时在delete ui处出现segmentation fault
做了个显示图片的单文档程序. qt 单文档程序关闭时在delete ui处出现segmentation fault. 调试发现调用两次mainwindow析构函数. http://blog.csdn. ...
- QT父子与QT对象delete
原地址:http://www.qteverywhere.com/archives/437 很多C/C++初学者常犯的一个错误就是,使用malloc.new分配了一块内存却忘记释放,导致内存泄漏.Qt的 ...
- 从 Qt 的 delete 说开来
原地址:http://blog.csdn.net/dbzhang800/article/details/6300025 在C++中学习过程中,我们都知道: delete 和 new 必须 配对使用(一 ...
- Qt的SQL操作,DELETE,SELECT
#include <QObject> #include <QSqlDatabase> #include <QSqlError> #include <QSqlQ ...
- Qt中delete的问题
最近项目遇到了一个bug,压力测试ui总会崩溃,gdb调试未果,跑到了库函数,无从查起: (gdb)bt #0 0x4146b1e4 in QWidgetPrivate::drawWidget(QPa ...
- Qt中内存泄露和退出崩溃的问题 delete
Qt中帮程序员做了一些内存回收的事情,但正因为这些反而让对此不熟悉的人会屡屡犯错. 收录一篇不错的文章: 在C++中学习过程中,我们都知道: delete 和 new 必须 配对使用(一 一对应):d ...
- delete指针以后应赋值为NULL——QT deletelater指针以后也同样要马上赋值为NULL
delete p后,只是释放了指针指向的内存空间.p并不会自动被置为NULL,而且指针还在,同时还指向了之前的地址 delete NULL编译器不会报错(因为delete空指针是合法的) 例: 对一个 ...
- [转载][QT][SQL]sql学习记录3_sqlite之update delete like
转载自:详见 : http://www.runoob.com/sqlite/sqlite-create-table.html 约束表实例 下面是一个实例,它创建了一个 COMPANY 表,ID 作为主 ...
随机推荐
- SQL查询时,根据日期范围查询周
周数据会有weekbegin和weekend两个字段,用来描述周的开始日期和结束日期. 现在项目中的日历控件不支持周查询,只支持日期查询,所以目前面临的问题是,根据时间范围,查询周. 最终sql如下: ...
- 小波变换-python pywavelets
# -*- coding: utf-8 -*- import matplotlib.pyplot as plt import numpy as np import pywt from matplotl ...
- Exp2 后门原理与实践 20164302 王一帆
1 实验内容 1.1实验主要内容 (1)使用netcat获取主机操作Shell,cron启动 (0.5分) (2)使用socat获取主机操作Shell, 任务计划启动 (0.5分) (3)使用MSF ...
- MQTT之Mosquitto
https://mosquitto.org/ Eclipse Mosquitto是一个开源(EPL / EDL许可)消息代理,它实现了MQTT协议版本3.1和3.1.1.Mosquitto重量轻,适用 ...
- MyBatis返回map数据
(1)接口中编写方法 //单行 public Map<String, Object> getEmpReturnMap(Integer id); //多行 @MapKey("id& ...
- mongodb 数据导出
后台找我导数据 以此记录 在mongodb bin目录下执行 ./mongoexport -d xxx(db name)-c xxx(Collection name)-u xxx(username) ...
- java中class文件与jar文件
1. JAR 文件包 JAR 文件就是 Java Archive File,顾名思意,它的应用是与 Java 息息相关的,是 Java 的一种文档格式.JAR 文件非常类似 ZIP 文件——准确的说, ...
- js 面向对象的三大特性:封装,继承、多态
一:什么是封装? 封装的定义:就是对象内部的变化对外界是透明的,不可见的. 封装的场景: 在写项目的过程中,有时候不同页面,会有相同的功能,我们还需要每个页面都写一遍吗?额,,,,其实也可以写的,只不 ...
- 样式布局与 BFC
一.几类视图 内联视图:inline 单行 块级视图:block 换行,有高度 行内块级视图:inline-block 单行,有高度 二.几类布局 块级布局 换行,通过设置 margin 水平居中 & ...
- python多版本管理工具(pyenv)
在学习和利用python开发的很多情况下,需要多版本的Python并存.此时需要在系统中安装多个Python,但又不能影响系统自带的 Python.pyenv 就是这样一个 Python 版本管理器. ...