• 3837阅读
  • 3回复

[提问]Qt中有关栈对象和堆对象 [复制链接]

上一主题 下一主题
 

只看楼主 倒序阅读 楼主  发表于: 2016-05-16
在Qt中定义对象时,在堆上面创建还是在栈上面创建,怎么判断?怎么看了《Qt Creator快速入门》上面的示例好多都是在堆上面new出来的。
本帖提到的人: @XChinux @lifengjz @q洁士铭
离线iamhuskar

只看该作者 1楼 发表于: 2016-05-16
这和QT关系不大。是C/C++的问题。

你调用了new 或者malloc之类内存分配函数的全部都是在堆上面的。其他的都是在栈里面。
用了new(malloc)的一定要用delete(free)释放。只是由于QT有些已经帮你做了。有些object构造函数如果可以指定parent。一般delete的工作由parent来执行。有些是qt自动帮你删除,比如QStandardItemModel 添加的item都是new的。你QStandardItemModel  remove对应项的时候qt就帮你delete了。具体可以看源码
离线lemonzll

只看该作者 2楼 发表于: 2016-05-16
Qt里面的类一般如果不是QObject子类的,就在栈上创建,比如QSettings,QString之类的,都直接在栈上创建就行。另外看栈上创建类的重量程度,只要消耗内存不是特别多,比如内存占用有几M,就在栈上创建就可以,如果有十几M,最好在堆上创建。QDialog子类一般在栈上创建,使用起来比较方便。
离线wsfxzxb

只看该作者 3楼 发表于: 2016-05-22
这个根据程序需要来吧,没有具体的使用环境不好说。
快速回复
限100 字节
 
上一个 下一个