1. ホーム
  2. c++

[解決済み] C++の*thisとthisの比較

2022-03-06 20:04:40

質問

以下の内容は理解できます。 this とはどう違うのでしょうか? *thisthis ?

はい、ググって読みました。 *this を教科書に載せているのですが、どうしても理解できません...。

どのように解決するのですか?

this はポインターであり *this はデリファレンスポインタである。

を返す関数があったとしたら、その関数は this を返す関数は、現在のオブジェクトへのポインタとなります。 *this は、スタック上に確保された現在のオブジェクトの "clone" となる --。 ただし メソッドの戻り値の型を参照を返すように指定した場合。

コピーとリファレンスの操作の違いを示す簡単なプログラムです。

#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

を操作すると コピー を操作しても変更は持続しませんが、参照やポインタを操作すると、そのオブジェクトは完全に別のオブジェクトになります。 する は変更を持続させます。