Je comprends ce que fait this
, mais quelle est la différence entre *this
et this
?* ceci par rapport à ceci en C++
Oui, j'ai googlé et lu sur *this
dans mon livre de texte, mais je ne comprends pas ...
Je comprends ce que fait this
, mais quelle est la différence entre *this
et this
?* ceci par rapport à ceci en C++
Oui, j'ai googlé et lu sur *this
dans mon livre de texte, mais je ne comprends pas ...
this
est un pointeur et *this
est un pointeur déréférencé.
Si vous aviez une fonction qui est revenu this
, ce serait un pointeur vers l'objet courant, tandis qu'une fonction qui est revenu *this
serait un « clone » de l'objet courant, alloué sur la pile - à moins que vous ont spécifié le type de retour de la méthode pour renvoyer une référence.
Un programme simple qui montre la différence entre fonctionnement sur les copies et les références:
#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;
}
Sortie:
1
1
2
3
Vous pouvez voir que lorsque nous fonctionnons sur une copie de notre objet local , les changements ne persistent pas (parce qu'il est un objet totalement différent), mais fonctionnant sur une référence ou pointeur ne les changements persistent.
this
est un pointeur vers l'instance de la classe. *this
est une référence au même. Ils sont différents de la même manière que int* i_ptr
et int& i_ref
sont différents.
Il n'y a pas de différence réelle, this->foo()
est le même que (*this).foo()
.
ahh oui, je suppose que je devrais avoir jeté cela dans le compilateur d'abord pour vérifier :) –
Je validation ici: retour * cela ne retourne pas la référence de l'objet, mais une copie de l'objet? –
Vous avez raison de demander. * ceci renvoie en fait une référence à l'objet. Par exemple, si vous surchargez l'opérateur [] dans votre classe, vous pouvez utiliser la classe (* this) [] au lieu de operator []. – ypnos
Mark, votre exemple est trompeur. Essayez Foo & get_copy() {return * this; } Alors vous voyez qu'en fait * ceci est une référence. – ypnos