Contenu du cours
Pointeurs Intelligents C++
Pointeurs Intelligents C++
Comment Les Références Diffèrent-Elles Des Pointeurs ?
Comprendre les références
Dans la première section, nous avons vu que les références sont des alias pour des variables existantes. Leur principale fonction est de fournir une syntaxe alternative pour accéder à la valeur d'un objet. Si nous regardons sous le capot, l'adresse mémoire d'une référence est la même que l'adresse mémoire de l'objet référencé.
main
#include <iostream> int main() { int num = 42; int& refNum = num; // Output memory addresses std::cout << "Address of num: " << &num << std::endl; std::cout << "Address of refNum: " << &refNum << std::endl; // Output values std::cout << "Value of num: " << num << std::endl; std::cout << "Value of refNum: " << refNum << std::endl; }
Si vous exécutez le code ci-dessus, vous verrez que la variable num
et la référence refNum
auront les mêmes valeurs et les mêmes adresses mémoire.
Une référence est essentiellement un pointeur constant
Une autre façon de le voir est qu'une référence est essentiellement un pointeur constant. Un pointeur constant est un pointeur qui ne peut pas être réassigné à un objet dynamique différent après l'initialisation. Cependant, un pointeur constant doit être déréférencé pour obtenir la valeur de l'objet dynamique. Avec les références, vous n'avez pas besoin de déréférencer car vous pouvez accéder directement à la valeur. Considérons un exemple pour plus de clarté :
main
#include <iostream> int main() { // Example with a reference int num1 = 42; int& refNum = num1; // Example with a constant pointer int num2 = 73; int* const ptrNum = &num2; // Attempting to reassign the reference or constant pointer will result in a compilation error // refNum = num2; // Uncommenting this line will just set num1 value to num2 value // ptrNum = &num1; // Uncommenting this line will cause a compilation error // Output values directly through reference and with dereferencing constant pointer std::cout << "Value of num1 through refNum: " << refNum << std::endl; std::cout << "Value of num2 through ptrNum: " << *ptrNum << std::endl; }
Dans le code ci-dessus, nous démontrons plusieurs choses. Tout d'abord, nous créons un pointeur constant et une référence. Ensuite, nous montrons qu'aucun d'eux ne peut être réassigné. Enfin, nous imprimons leurs valeurs : Pour le pointeur constant, nous devons utiliser *
pour le déréférencement, mais la référence peut être accédée directement. Jouez avec le code pour en apprendre davantage, tout en suivant les commentaires !
Affectation à NULL | Peut être affecté à NULL | Ne peut pas être affecté à NULL |
Adresse en mémoire | A sa propre adresse en mémoire | N'a pas sa propre adresse en mémoire |
Initialisation | Peut être laissé non initialisé | Doit être initialisé ou provoque une erreur de compilation |
Pointeur vers un autre pointeur | Possible | Pas possible |
Création de tableau | Un tableau de pointeurs peut être créé | Un tableau de références ne peut pas être créé |
Accès aux membres de classe/struct | Utilisez -> pour accéder aux membres | Utilisez . pour accéder aux membres |
Merci pour vos commentaires !