* это против этого в C ++ - PullRequest
30 голосов
/ 01 мая 2010

Я понимаю, что делает this, но в чем разница между *this и this?

Да, у меня есть Google и я перечитал *this в моем учебнике, но яне понимаю ...

Ответы [ 3 ]

56 голосов
/ 01 мая 2010

this - указатель, а *this - разыменованный указатель.

Если бы у вас была функция, которая возвратила this, это был бы указатель на текущий объект, тогда как функция, которая возвратила *this, была бы "клоном" текущего объекта, размещенного в стеке - если вы не указали тип возврата метода для возврата ссылки.

Простая программа, которая показывает разницу между работой с копиями и ссылками:

#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

Вы можете видеть, что когда мы работаем с копией нашего локального объекта, изменения не сохраняются (потому что это совершенно другой объект), а работают со ссылкой или указателем сохранить изменения.

10 голосов
/ 01 мая 2010

this - указатель на экземпляр класса. *this является ссылкой на то же самое. Они отличаются так же, как int* i_ptr и int& i_ref.

0 голосов
/ 01 мая 2010

Реальной разницы нет, this->foo() совпадает с (*this).foo().

...