7对象树(1)
目录
QLabel* label = new Qlabel(this)会出现内存泄露吗
上述代码,在 Qt 中不会产生内存泄露label 对象会合适的时候被析构释放~~(虽然没有手动写 delete,确实能释放)之所以能够把对象释放掉,主要是因为把这个对象是挂到了对象树上
试想一下,如果这个对象是按照 栈上 的变量创建的就可能会存在一些“提前释放”的问题
当把对象改成在栈上创建,此时就可以看到,运行起来的程序
无法显示出 hello world此时 label 对象随着构造函数的结束就销毁了
使用对象树,把这些内容组织起来,最主要的目的,就是为了能够在合适的时机(窗口关闭/销毁),把这些对象统一进行释放通过这个树形结构,就把界面上要显示的这些控件对象都组织起来了
QLabel* label = new Qlabel(this)会出现内存泄露吗
这个代码, new 了对象之后, 咋没有 delete 呢?
不 delete 不就出现内存泄漏了吗??
上述代码,在 Qt 中不会产生内存泄露
label 对象会合适的时候被析构释放~~(虽然没有手动写 delete,确实能释放)
之所以能够把对象释放掉,主要是因为把这个对象是挂到了对象树上
此处参数(this):
此处通过 new 的方式创建对象,也就是为了把这个对象的
生命周期,交给 Qt 的对象树来统一管理
试想一下,如果这个对象是按照 栈上 的变量创建的
就可能会存在一些“提前释放”的问题
当把对象改成在栈上创建,此时就可以看到,运行起来的程序
无法显示出 hello world
此时 label 对象随着构造函数的结束就销毁了
前端开发(网页开发)也涉及到 类似的 对象树(DOM)本质上也是一个树形结构( N叉树),通过树形结构把界面上的各种元素组织起来.
Qt 中也是类似,也是搞了一个对象树,也是 N 叉树,把界面上的各种元素组织起来了.~~
使用对象树,把这些内容组织起来,最主要的目的,就是为了能够在合适的时机(窗口关闭/销毁),把这些对象统一进行释放
通过这个树形结构,就把界面上要显示的这些控件对象都组织起来了
这里的树上的这些对象,统一销毁是最好不过的
如果某个对象提前销毁,此时就会导致对应的控件就在界面上不存在了