关于Qt和指针的简单查询

关于Qt和指针的简单查询,qt,pointers,Qt,Pointers,这不像是一个重大的疑问,但自从我看到它就一直困扰着我。 这是否: QObject* f_pObject = this; 执行与此相同的操作: f_pObject = f_pObject->parent(); ? 附言:我以前对指针很糟糕,现在我正在重新努力学习 PPS:我不懂仇恨。我认为这是一个鼓励专家程序员和学习者的论坛。这不像是我要求做家庭作业。让我们看一个完整的例子,与它产生的输出交织在一起: #include <QtCore> class P : public Q

这不像是一个重大的疑问,但自从我看到它就一直困扰着我。 这是否:

QObject* f_pObject = this;
执行与此相同的操作:

f_pObject = f_pObject->parent();
?

附言:我以前对指针很糟糕,现在我正在重新努力学习


PPS:我不懂仇恨。我认为这是一个鼓励专家程序员和学习者的论坛。这不像是我要求做家庭作业。

让我们看一个完整的例子,与它产生的输出交织在一起:

#include <QtCore>

class P : public QObject { Q_OBJECT };

class C : public QObject {
   Q_OBJECT
   QObject * pointer;
public:
   C(QObject * parent = {}) : QObject{parent} {
      pointer = this;
      qDebug() << "this" << this << "pointer" << pointer;
   }
   void test() {
      pointer = pointer->parent();
      qDebug() << "this->parent()" << this->parent() << "pointer" << pointer;
   }
};

int main() {
   P parent;
   C child{&parent};  // this C(0x7fff5e663ac8) pointer C(0x7fff5e663ac8)
   child.test();      // this->parent() P(0x7fff5e663ae0) pointer P(0x7fff5e663ae0)
   C orphan;          // this C(0x7fff5e663aa0) pointer C(0x7fff5e663aa0)
   orphan.test();     // this->parent() QObject(0x0) pointer QObject(0x0)
}
#include "main.moc"
本例中的指针或f_pObject是指向对象的变量。它的价值与任何特定对象的存在完全解耦。指针不是对象

就像有一张纸上的地址一样。把指针想象成一张有地址的纸。最初你在上面写上C.希尔德女士的地址。然后你去拜访C.希尔德女士,问她父母的地址。她把地址给了你,你抹去并用写给P.阿伦特先生和P.阿伦特女士的地址覆盖了这张纸

很明显,无论你对这张纸做什么,指针本身与C.希尔德女士和p.先生和p.女士的房子是否存在无关


C.Hild女士可能生来就是孤儿,或者如果她的父母去世,父对象被破坏,或者如果他们与她断绝关系,父对象继续生存,但是孩子得到了setParentnullptr,她就成为孤儿。如果其中任何一个对象不复存在,您将得到一个悬空的指针。你有一张没有地址的纸。

你说的做与……相同的事情是什么意思。。。?现在还不清楚你在问什么。在第一个代码行初始化时声明一个变量与将一个表达式赋给一个变量不是一回事——不管是哪个表达式。第二行取决于f_pObject的现有值。@DmitrySazonov感谢您的回复。如果我所理解的是错误的,请纠正我:第一行初始化一个指针f_pObject,并将地址分配给它在本文中定义的父类。在第二行中,调用f_pObject指向的类中的父函数,它返回父类的地址,该地址再次放入f_pObject。那么他们不是在做同样的事情吗?这不是一个父类。这是目前的课程。你的第二句话是对的,好吧!如果我没弄错的话,在第一行中,当前子类的地址存储在指针中。在第二行中,父类的地址替换同一指针变量中当前子类的地址。因此,如果没有父类,指针将具有空值。是这样吗?