我有以下C ++ / Qt代码:

QTreeWidgetItem *itemPointer = this->widget->topLevelItem(0);
QTreeWidgetItem item = *itemPointer;
QTreeWidgetItem *itemPointer2 = &item;

qDebug() << itemPointer->childCount();   // 2 (answer I'm looking for)
qDebug() << (*itemPointer).childCount(); // 2
qDebug() << item.childCount();           // 0
qDebug() << itemPointer2->childCount();  // 0

qDebug() << itemPointer;  // 0xeb6f70
qDebug() << itemPointer2; // 0x7fffeeca7330


取消引用的item是否应该产生相同的结果?什么改变了指针?

之间有什么区别

SomeClass *a = ...;
SomaClass b = *a;
b.x();




SomeClass *a = ...;
(*a).x();


最佳答案

题:


  被取消引用的项目不应该产生相同的结果吗?什么改变了指针?


回答:


  它取决于类的副本构造函数。


使用时:

QTreeWidgetItem item = *itemPointer;


item是使用QTreeWidgetItem的副本构造函数构造的,它不是指针的简单取消引用的对象。如果QTreeWidgetItem的复制构造函数未复制子代,则item将没有任何子代。

如果只想使用取消引用的对象,则必须使用引用对象。

QTreeWidgetItem& item = *itemPointer;

10-05 22:27