CPP 的this指针辨析


C++ 的 this 指针

指针在这里面是非常难理解的东西,所以要根据例子,自己实践。
在你没有去具体了解之前,不要轻易下结论。
最近,看了《在山的那边》,又有一点新感悟( •̀ ω •́ )✧

this指针

调用成员函数时,成员函数通过一个名为 this 的隐式参数来访问调用它的那个对象,用请求该函数的对象地址初始化 this ,this 的指向总是自己这个对象,所以 this 是一个常量指针

Box* get_address()   //得到this的地址
{
	return this;
}
Box* get_address()   //得到this的地址
{
	Box box;
	this = &box; // error: lvalue required as left operand of assignment
    return this;
}

在 C++ 中,this 指针是一个隐式传递给非静态成员函数的常量指针,用于指向调用该函数的对象。以下是对你的代码和 this 的特性总结:

特性:

  1. this 是一个隐式指针
    • 每个非静态成员函数都有一个隐式的 this 指针,用来访问调用该成员函数的对象。
    • this 指针的类型为 ClassName* const,即常量指针,不能被修改。
  2. this 指针的用途
    • 访问成员变量和成员函数。
    • 返回对象自身的地址。
    • 在需要对象指针的场景下传递 this
  3. 静态成员函数中没有 this 指针
    • 静态成员函数不与任何特定对象绑定,因此没有 this 指针。

代码分析

  1. 正确的用法

    Box* get_address() // 返回当前对象的地址
    {
        return this;
    }

    解释

    • 函数中 this 指针指向调用该函数的对象。
    • 返回 this 时即返回调用该函数的对象地址。
    • 这是一个有效的用法。
  2. 错误的用法

    Box* get_address() 
    {
        Box box;
        this = &box; // 错误: 赋值操作试图修改 `this`
        return this;
    }

    错误原因

    • this 是一个常量指针,不能被赋值。
    • this 的作用是固定指向当前调用对象,任何试图修改 this 都会导致编译错误。

总结

  • this 指针的值是无法更改的,它始终指向当前对象。
  • 如果需要返回一个新对象的地址,应该直接返回新对象的地址而不是试图修改 this

正确示例:

Box* create_new_box()
{
    Box* box = new Box();
    return box; // 返回新对象的地址
}

文章作者: AllenMirac
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 AllenMirac !
  目录