Un premier problème va survenir lorsqu'on va vouloir assurer une "unicité identitaire" à une variable.
En terme technique, on parlerait plutot de variable (ou plutot de classe ou de structure ) ayant sémantique d'entité (par opposition à une classe ou une structure ayant sémantique de valeur).
Une classe (ou une structure, car il n'y a pas des masses de différences entre les deux en C++
)ayant sémantique d'entité est une classe dont chaque instance est strictement unique, même si, d'aventure, il devait arriver d'avoir deux instances ayant les même caractéristiques.
Les exemples classiques d'une classe ayant sémantique d'entité sont les classes Personne (chaque personne est rigoureusement unique, meme si elle a un sosie ou un jumeau), Voiture (Même si tu trouve une voiture identique en tout point à la tienne, ce ne sera vraiment la tienne que... si c'est vraiment la tienne), CompteBanquaire, et bien d'autres encore.
Généralement, toute modification que nous pourrions apportée sur une variable dont le type a sémantique d'entité s'effectuera toujours sur le même objet, sans jamais essayer de créer un nouvel objet
A contrario, les classes (ou les structures) ayant sémantique de valeur peuvent exister "physiquement" plusieurs fois en mémoire.
C'est le cas pour l'ensemble des nombres, les chaines de caractères, p les coordonnées, les couleurs, bref, tout ce qui peut, d'une manière ou d'une autre, être considéré comme représentant une unité donnée
Le propre d'une classe (ou d'une structure) ayant sémantique de valeur, c'est que, si on la modifie en quoi que ce soit, nous obtiendront un objet "physiquement" (dans le sens où il prend une adresse mémoire différente) différent de l'objet d'origine.
Mais, revenons en à nos moutons, et au problème que l'on peut éprouver avec les classes ayant sémantique de valeur
Tu l'auras compris, une classe ayant sémantique de valeur ne peut, par essence même, pas être copiée (ou, du moins, elle ne devrait pas pouvoir l'être
)
Or, l'insertion dans une collection d'objets risque (d'essayer ) de provoquer une copie de l'objet, sauf... si on place dans la collection non pas l'objet en lui-même mais... une variable qui contient l'adresse de la mémoire à laquelle se trouve le dit objet (autrement dit : un pointeur )
.
Il faut savoir qu'un pointeur n'est jamais qu'une variable numérique un peu particulière en cela qu'elle représente l'adresse de la mémoire à laquelle on trouvera réellement la variable (ou l'objet).
Le pointeur en lui-même a donc bel et bien une sémantique de valeur, et peut parfaitement être copié
Partager