标题:Qt中有关栈对象和堆对象
作者:小白修炼中
日期:2016-05-16 13:22
内容:
在Qt中定义对象时,在堆上面创建还是在栈上面创建,怎么判断?怎么看了《Qt Creator快速入门》上面的示例好多都是在堆上面new出来的。
#1 [iamhuskar 05-16 15:57]
这和QT关系不大。是C/C++的问题。
你调用了new 或者malloc之类内存分配函数的全部都是在堆上面的。其他的都是在栈里面。
用了new(malloc)的一定要用delete(free)释放。只是由于QT有些已经帮你做了。有些object构造函数如果可以指定parent。一般delete的工作由parent来执行。有些是qt自动帮你删除,比如QStandardItemModel 添加的item都是new的。你QStandardItemModelremove对应项的时候qt就帮你delete了。具体可以看源码
#2 [lemonzll 05-16 16:06]
Qt里面的类一般如果不是QObject子类的,就在栈上创建,比如QSettings,QString之类的,都直接在栈上创建就行。另外看栈上创建类的重量程度,只要消耗内存不是特别多,比如内存占用有几M,就在栈上创建就可以,如果有十几M,最好在堆上创建。QDialog子类一般在栈上创建,使用起来比较方便。
#3 [wsfxzxb 05-22 21:17]
这个根据程序需要来吧,没有具体的使用环境不好说。