Qt中的析构函数
来源:互联网 发布:h5获取json数据实例 编辑:程序博客网 时间:2024/06/05 04:22
转自:http://blog.csdn.net/bdss58/article/details/41045657
Overview
在Qt中,QObject将它自己组织成为一个对象树,当从QObject继承创建新对象时,新对象就会添加的父对象的子孙列表中。当删除父对象时,会自动将子孙对象一并析构。
这就是为什么在Qt编程中,我们往窗口中动态(使用new)添加部件(Qwidget)后,而在析构函数中并不需要自己编写析构函数去删除这些new出来的widgets。因为Qwidget对象时Qobject对象的子对象。
QObjects的析构顺序
当Qobject对象创建在堆中(用new运算符),这个对象就会加入对象树中。当树中某个对象删除,那么这个对象的子孙结点对象一并删除(调用析构)。没有对象会被析构两次。
当Qobject对象创建到栈中,也会有相应的析构行为。通常析构顺序也不会有什么问题。看下面代码:
- int main()
- {
- QWidget window;
- QPushButton quit("Quit", &window);
- ...
- }
父对象window和子对象quit都是QObjects对象。qpushbutton继承自qwidget,qwidget继承自Qobject,根据c++标准,会先析构quit,然后析构window。所以quit不会被析构两次。
但是下面代码有问题:
- int main()
- {
- QPushButton quit("Quit");
- QWidget window;
- quit.setParent(&window);
- ...
- }
这时,父对象的析构函数会先被调用,因为父对象后被创建。让后调用子对象(quit)的析构函数,而quit是局部变量,quit出了作用域后才能被析构,因此出错。
阅读全文
0 0
- Qt中的析构函数
- Qt中的析构函数
- Qt中的析构函数
- qt中的虚函数
- Qt中的setShortcut()函数
- qt中的connect函数
- QT中的connect函数
- 关于qt中的tr()函数
- qt中的tr()函数
- 笔记:QT中的signal函数
- Qt中的connect函数使用
- Qt Creator中的connect函数
- 关于qt中的tr()函数
- QT中的随机函数的用法
- qt常用函数在PYQT中的使用方法
- 关于qt中的tr()函数
- QT中的随机函数的用法
- Qt调用dll中的功能函数
- 延迟加载算法微服务的模型
- php去掉最后一个字符
- jquery前端递归打印出树状结构的多层复杂map或json键值对数据
- Unicode编码的emoji表情如何在前端页面展示(JS)
- sysfs attr
- Qt中的析构函数
- HNUST 1411 矩阵转置
- 深圳城市交通文明7月份测评指数为84.06分
- afdfd
- python 获取mac地址
- AndroidStudio编码设置
- 进程池与列表循环多参传递
- GreenPlum入门
- 设置Linux服务器只能访问内网,无法访问外网