Я понимаю, что делает this
, но в чем разница между *this
и this
?
Да, у меня есть Googled и читать *this
в моем учебнике, но я просто не понимаю...
Я понимаю, что делает this
, но в чем разница между *this
и this
?
Да, у меня есть Googled и читать *this
в моем учебнике, но я просто не понимаю...
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
Вы можете видеть, что, когда мы работаем с копией нашего локального объекта, изменения не сохраняются (потому что это совсем другой объект целиком), но работа над ссылкой или указателем сохраняет текущие изменения.
this
является указателем на экземпляр класса. *this
- это ссылка на то же самое. Они отличаются друг от друга так, что int* i_ptr
и int& i_ref
отличаются.
Нет реальной разницы, this->foo()
совпадает с (*this).foo()
.