Qt中的析构函数

Overview
在Qt中,QObject将它⾃⼰组织成为⼀个对象树,当从QObject继承创建新对象时,新对象就会添加的⽗对象的⼦孙列表中。当删除⽗对象时,会⾃动将⼦孙对象⼀并析构。
avcool这就是为什么在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出了作⽤域后才能被析构,因此出错。

本文发布于:2024-09-22 20:33:50,感谢您对本站的认可!

本文链接:https://www.17tex.com/xueshu/434977.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:对象   函数   删除   的析构
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议