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