Constructeurs et destructeurs

Lorsqu’on déclare une variable, le compilateur lui alloue automatiquement une place en mémoire. Éventuellement, il lui donne une valeur initiale si celle-ci est précisée :

int i = 1;

Dans le cas d’une structure sans partie privée, il est possible d’initialiser aussi une instance en donnant la liste des valeurs des champs, dans l’ordre de leur déclaration :

struct exemple {     int i;     char c;     } ex = { 1, 'A' }, ex2 = { 2 };				exemple ex3 = { 5, 'a' };

Les champs non précisés sont mis à zéro dans ce cas.

Cette possibilité d’initialiser des données au moment de leur déclaration est précieuse, et doit être employée au maximum, comme on l’a déjà dit précédemment. Cependant, elle possède trois défauts importants. D’abord, dans le cas de classes ou de structures ayant des parties privées, on ne peut évidemment pas l’employer, puisque ces parties sont inaccessibles ; même si elles l’étaient, rien ne prouve que le programmeur qui utilise une classe sait l’initialiser correctement ; par exemple, on ne sait pas initialiser correctement la classe iostream (voir chapitre 9) qui est fournie dans la librairie d’entrées-sorties. D’autre part, les initialisations complexes, nécessitant par exemple des appels de fonctions successifs ne sont pas possibles directement. Enfin, les variables automatiques n’étant pas initialisées par le compilateur, le programmeur risque d’oublier de le faire, et il en résultera des erreurs graves.

De ce fait, le langage fournit à l’intention des classes et structures un système un peu plus complexe, mais bien plus sophistiqué, les constructeurs et les destructeurs. Ce système supplée non seulement au premier défaut mais également aux deux autres, comme nous allons le voir.

Précédent Précédent Sommaire Sommaire Suivant Suivant