"this"指针在构造函数内部指向什么C++?

What does the "this" pointer points to inside a constructor in C++?

本文关键字:什么 C++ 内部 this 指针 构造函数      更新时间:2023-10-16

在C++中,"this"指针指向调用对象。但是,当我们使用参数调用构造函数时,"this"指针指向什么?

例如,以下行调用构造函数:

TestManager myTest(device_name);

如果我在构造函数中放置一个断点:

TestManager::TestManager(string device_name)
{
// bunch of code    
}

我应该期待"这个"指针指向什么?

我问这个问题的原因是,在我的代码中,"this"指针指向代码中未在任何地方调用或使用的另一个对象。

提前谢谢。

this总是指向对象。对于构造函数或析构函数,这意味着要构造或破坏的对象。

我问这个问题的原因是,在我的代码中,"this"指针指向代码中未在任何地方调用或使用的另一个对象。

假设你的代码写得有点合理,对象只在其构造完成后使用,所以在构造函数期间,你还没有在其他地方看到该特定值是有道理的。

"This"指向您当前正在使用的对象。如果你正在编写方法、构造函数、析构函数,你可以使用"this"。如果你正在编写友元函数或静态函数,你不能使用"this"。

this指向正在初始化的当前对象的实例。到达构造函数后,对象实例的必要空间已经分配并this指向它。

在子类化和从构造函数中调用虚拟/重写方法时要小心:

例:

class A {
  A() {
    this->work();
  }
  virtual void work() {
    // ...
  }
};
class B : public A {
  B() {
    // ...
  }
  void work() override {
    // use some private members of B
  }
};

在这种情况下,使用来自A构造函数内部A私有成员是可以的。但是由于派生类的成员是在基类之后初始化(和分配!)的,因此B的私有成员在到达B的构造函数之前是无效的。因此,如果您遇到这种情况,您的程序很可能会崩溃。

除此之外,我想不出在A的构造函数中使用this的任何问题。