我有以下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();
答案 0 :(得分:3)
问题:
取消引用的项目是否应该产生相同的结果?什么改变指针?
答案:
这取决于类的复制构造函数。
使用时:
QTreeWidgetItem item = *itemPointer;
item
是使用QTreeWidgetItem
的复制构造函数构造的,它不是指针的简单解除引用对象。如果QTreeWidgetItem
的复制构造函数没有复制孩子,item
将不会有孩子。
如果您只想使用解除引用的对象,则必须使用引用对象。
QTreeWidgetItem& item = *itemPointer;
答案 1 :(得分:1)
没必要。
在第一个代码段中创建一个新对象
SomeClass *a = ...;
SomaClass b = *a;
b.x();
因此结果取决于如何定义复制构造函数。例如,它只能复制原始对象的部分状态。