C++中"this"指针的目的是什么?

de *_*sto 16 c++ pointers this

this关键字的目的是什么?类中的方法是否可以访问同一个类中的其他对等成员?this在类中调用一个调用peer方法的需要是什么?

Jos*_*ley 35

两个主要用途:

  1. *thisthis作为参数传递给其他非类方法.

    void do_something_to_a_foo(Foo *foo_instance);
    
    void Foo::DoSomething()
    {
        do_something_to_a_foo(this);
    }
    
    Run Code Online (Sandbox Code Playgroud)
  2. 允许您删除成员变量和函数参数之间的歧义.这在构造函数中很常见.
    MessageBox::MessageBox(const string& message)
    {
      this->message = message;
    }
    Run Code Online (Sandbox Code Playgroud) (虽然在这个特定的例子中,初始化列表通常比分配更好.)

  • +1.还有第三种情况:如果你有一个类模板,其基类依赖于模板参数,访问基类的成员需要`this->`或`baseclass ::`来延迟名称查找. (13认同)
  • @josefx:这些评论之一让我感到遗憾的是我们不能对评论进行投票. (4认同)
  • @josefx:对我来说,似乎除了一些极端情况之外,在使用经典`delete p的代码中,`this`指针通常是'NULL`; p = NULL;`反模式.换句话说:在代码中_manually摆弄动态内存_(并且当然会弄错).解决这些问题的方法不是将断言用于捕获其经典错误(注意:_if,_它应该肯定是`assert(this);`).__解决方案是永远不要写这样的代码.__ (2认同)

Mar*_*ork 14

  • 有助于消除变量的歧义.
  • 将自己作为参数传递或返回自己的结果

例:

struct A
{
    void test(int x)
    {
        this->x = x;                 // Disambiguate. Show shadowed variable.
    }
    A& operator=(A const& copy)
    {
        x = copy.x;
        return *this;                // return a reference to self
    }

    bool operator==(A const& rhs) const
    {
         return isEqual(*this, rhs); // Pass yourself as parameter.
                                     // Bad example but you can see what I mean.
    }

    private:
        int x;
};
Run Code Online (Sandbox Code Playgroud)


Ign*_*ams 1

它允许您绕过被方法参数或局部变量隐藏的成员。