我了解this
的作用,但*this
和this
之间的区别是什么?
是的,我在Google教科书中使用Google搜索并阅读了*this
,但我只是不明白......
答案 0 :(得分:56)
this
是一个指针,*this
是一个解除引用的指针。
如果你有一个返回this
的函数,它将是一个指向当前对象的指针,而返回*this
的函数将是当前对象的“克隆”,在stack - 除非指定了返回引用的方法的返回类型。
一个简单的程序,显示了对副本和引用进行操作之间的区别:
#include <iostream>
class Foo
{
public:
Foo()
{
this->value = 0;
}
Foo get_copy()
{
return *this;
}
Foo& get_copy_as_reference()
{
return *this;
}
Foo* get_pointer()
{
return this;
}
void increment()
{
this->value++;
}
void print_value()
{
std::cout << this->value << std::endl;
}
private:
int value;
};
int main()
{
Foo foo;
foo.increment();
foo.print_value();
foo.get_copy().increment();
foo.print_value();
foo.get_copy_as_reference().increment();
foo.print_value();
foo.get_pointer()->increment();
foo.print_value();
return 0;
}
输出:
1
1
2
3
您可以看到,当我们对本地对象的副本进行操作时,更改不会持久存在(因为它完全是一个不同的对象),而是在引用或指针上运行 会保留更改。
答案 1 :(得分:10)
this
是指向类实例的指针。 *this
是引用。它们的不同之处在于int* i_ptr
和int& i_ref
不同。
答案 2 :(得分:-4)
没有真正的区别,this->foo()
与(*this).foo()
相同。