Masquage de pointeur pour un type abstrait de donnée
Bonjour,
parfois des types abstraits de donnée sont définis ainsi :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| typedef struct
{
int n;
}
*Integer;
Integer newInteger(int n)
{
Integer i = malloc(sizeof(*i));
i->n = n;
return i;
}
void deleteInteger(Integer i)
{
free(i);
}
int getValue(Integer i)
{
return i->n;
} |
et est utilisé ainsi :
Code:
1 2 3 4
|
Integer i = newInteger(1);
printf("%i\n", getValue(i));
deleteInteger(i); |
Or il a été signalé à plusieures reprises sur ce forum que masquer un pointeur n'était pas une bonne pratique .
Plusieures questions :
1) Pourriez vous donner des exemples de problèmes générés par cette pratique dans le cas général, c'est à dire si l'utilisateur du type abstrait manipule directement celui ci sans passer par les fonctions qui lui sont associées.
2) Dans le cas où l'utilisateur utilise les fonctions fournies et uniquement celles-ci pour :
- construire le type abstrait
- manipuler le type abstrait
- effacer le type abstrait
peut il y avoir encore des problèmes, si oui, lesquels ?
Merci .