gpt4 book ai didi

C++ 指针与取消引用的对象

转载 作者:行者123 更新时间:2023-11-27 22:59:58 25 4
gpt4 key购买 nike

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

?

最佳答案

问题:

Shouldn't the dereferenced item produce the same results? What changes the pointer?

回答:

It depends on the copy constructor of the class.

当您使用时:

QTreeWidgetItem item = *itemPointer;

item是使用QTreeWidgetItem的拷贝构造函数构造的,它不是简单的指针解引用对象。如果 QTreeWidgetItem 的复制构造函数不复制子项,则 item 将没有任何子项。

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

QTreeWidgetItem& item = *itemPointer;

关于C++ 指针与取消引用的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28773140/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com