C++ : pourquoi utiliser un pointeur d'objet plutôt que l'objet lui-même ?

Les pointeurs peuvent être utilisés pour des variables ou des objets pour effectuer une allocation dynamique.

Les pointeurs sont un des éléments les plus compliqués du langage C++. Ils peuvent être utilisés pour des variables ou des objets pour effectuer une allocation dynamique. Il est recommandé de ne les utiliser que dans des cas précis.

Pour les objets, l'allocation dynamique se fait avec le mot clé new. Il existe 2 cas principaux pour lesquels une allocation dynamique d'un objet est utile. Le premier correspond à la portée de la variable. Une allocation dynamique permet d'avoir un objet que l'on peut utiliser en dehors de sa portée habituelle. Par exemple, on peut déclarer un objet dans une fonction et le réutiliser dans une autre grâce à cette notation : il correspondra au même objet. Si vous souhaitez pouvoir modifier ou copier cet objet, il faut plutôt utiliser un objet automatique. Le deuxième cas est la mémoire que prend l'objet dans la pile d'instructions. Si vous souhaitez manipuler un objet de lourde taille, il faudra utiliser l'allocation dynamique, car l'objet pointé occupe alors une place directement en mémoire et non dans la pile d'instructions. Si votre pile d'instructions est pleine, votre programme ne pourra plus fonctionner : l'allocation dynamique évite ce problème.

Les pointeurs sont utilisés également pour les variables, avec le caractère *. Le pointeur est alors une variable qui contient l'adresse mémoire d'une autre variable. Il existe plusieurs situations dans lesquelles les pointeurs peuvent être utilisés. Si vous souhaitez qu'une fonction ait accès à un objet directement, sans que ce soit une copie, vous pouvez alors utiliser le pointeur. Dans cette situation, il existe également la référence qui remplit exactement le même rôle, en étant exactement pensée pour cette utilisation. Il est donc recommandé d'utiliser plutôt les références.
Si vous avez besoin d'utiliser le polymorphisme, vous pouvez utiliser un pointeur ou une référence pour désigner la fonction.

Lorsque vous devez indiquer dans une fonction qu'un objet est optionnel, vous pouvez utiliser le pointeur null nullptr qui sera passé à l'objet qu'il faut oublier. S'il s'agit de l'argument d'une fonction, il est préférable et plus facile d'utiliser les valeurs par défaut pour les arguments, ou bien les surcharges de méthode.

Si ce n'est pas le cas, il existe également la librairie boost:optional qui fait référence à une valeur invalide. Un pointeur a comme propriété pour exister d'avoir seulement besoin du type d'objet pointé pour être déclaré. Cette propriété permet de réduire significativement le temps de compilation d'un programme grâce à la technique du pointeur opaque.

Le dernier cas d'utilisation est la communication avec une librairie du langage C. Le pointeur est alors obligatoire dans ce cas, car en C, les autres éléments n'existent pas, seul le pointeur peut être utilisé.

Divers