web-dev-qa-db-ja.com

*これとC ++のthis

thisの機能は理解していますが、*thisthisの違いは何ですか?

はい、Googleでテキストブックの*thisを読みましたが、理解できません...

36
anon235370

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変更を永続化します。

63
Mark Rushakoff

thisは、クラスのインスタンスへのポインターです。 *this参照と同じです。それらは、int* i_ptrint& i_refが異なるのと同じように異なります。

10
Marcelo Cantos