4.7.1 Pointeur vers une variable

Vous allez sûrement avoir une impression de déjà vu.

Voici comment on alloue un pointeur en C :

1
int * ptEntier = malloc(sizeof(int));

Et voici comment on désalloue un pointeur en C :

1
free(ptEntier);

Voici comment on alloue un pointeur en C++ :

1
int* ptEntier = new int;

Et voici comment on désalloue un pointeur en C++ :

1
delete ptEntier;

Mais c'est comme les tableaux.

Ah non, justement.

Bien, il faut quand même reconnaître que cette remarque est juste en ce qui concerne le C, mais ce n'est absolument pas vrai pour le C++.

Souvenez-vous, en C++, pour allouer et désallouer un tableau on utilise les opérateurs new [] et delete [], mais, avez-vous vu des crochets dans ce que nous venons de faire ?

Vous l'aurez compris, quand il s'agit d'une seule variable on n'utilise pas les crochets, mais ceci m'oblige à vous faire part d'un avertissement :

Si vous appeler un delete sur un tableau (et pas un delete []), vous n'allez désallouer que la première case de votre tableau, et donc votre programme aura des fuites de mémoire (il restera de la mémoire vive utilisée après l’arrêt de votre programme). Je vous rassure tout de suite, elle ne sera perdue que jusqu'au prochain redémarrage de votre ordinateur, mais c'est quand même gênant.

On a qu'a utiliser free, elle désalloue bien la mémoire de n'importe quelle pointeur non ?

Et bien, non. Je ne pourrai vous expliquer pourquoi qu'après la partie sur la programmation objet (qui est le propre du C++). Mais sachez quand même que la raison est due au différences entre les deux langages. Pour le moment nous allons utiliser les opérateurs du C++ pour faire du C++, et les fonctions malloc et free pour faire du C.