我有以下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;