首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > QT开发 >

QT构造函数的有关问题

2013-08-10 
QT构造函数的问题。在QT中,向QTreeWidget添加子项。QTreeWidgetItem时存在以下疑问QTreeWidgetItem item(par

QT构造函数的问题。
在QT中,向QTreeWidget添加子项。
QTreeWidgetItem时存在以下疑问

QTreeWidgetItem item(parentitem); 与 
QTreeWidgetItem *item = new QTreeWidgetItem(parentitem);

有什么区别,为什么第一个无法添加到树上,第二个可行?
他们是不是调用的同一个构造函数。 qt?构造函数? QTreeWidgetItem
[解决办法]
第一个item是一个实例,分配在栈上,语句块结束的时候自行销毁,第二个item是一个指针,new把它分配在了堆上,除非你delete它或者它的父对象被销毁,它会一直存在。基本的C++知识
[解决办法]
没错,基本c++
[解决办法]

引用:
在QT中,向QTreeWidget添加子项。
QTreeWidgetItem时存在以下疑问

QTreeWidgetItem item(parentitem); 与 
QTreeWidgetItem *item = new QTreeWidgetItem(parentitem);

有什么区别,为什么第一个无法添加到树上,第二个可行?
他们是不是调用的同一个构造函数。

构造函数是同一个的。
QTreeWidgetItem item(parentitem); 这里的item是个对象,分配在栈上,在离开作用域后会释放掉。按照楼主所述,应该是在你添加的时候,item已经被释放了。
而QTreeWidgetItem *item = new QTreeWidgetItem(parentitem);
这个item是指向QTreeWidgetItem的指针,分配在堆上,在调用delete或者程序结束之前不会被释放。
[解决办法]
其实这个变量的生存空间问题
第一个变量是分配在栈(stack)上,如果出了这个变量的作用域,栈就是自动析构掉这个变量,所以你等于新建后又删除了这个变量
第二个变量利用指针来new的,对象是分配在堆(heap)上的,而且是设置了父对象的,所以其生存周期是和父对象一致地,除非你人为地删除掉,所以你会显示出这个对象

热点排行