this
の機能は理解していますが、*this
とthis
の違いは何ですか?
はい、Googleでテキストブックの*this
を読みましたが、理解できません...
this
はポインターであり、*this
は逆参照ポインターです。
this
を返す関数がある場合、それは現在のオブジェクトへのポインタであり、*this
を返す関数は現在のオブジェクトの「クローン」であり、スタックに割り当てられます- -unless参照を返すメソッドの戻り値の型を指定していない場合。
コピーと参照の操作の違いを示す簡単なプログラム:
#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
ローカルオブジェクトのcopyを操作すると、変更が持続しない(完全に別のオブジェクトであるため)が、参照またはポインターでdoes変更を永続化します。
this
は、クラスのインスタンスへのポインターです。 *this
は参照と同じです。それらは、int* i_ptr
とint& i_ref
が異なるのと同じように異なります。