Précisions pour les précédents posts:
Les références sont PAS une garantie d'un pointeur non null. (Si l'on a souvent les traiter comme tels.)
Alors que terrifiant mauvais code, comme vous derrière le bûcher du mauvais code, le compiler & exécuter: (Au moins sous mon compilateur.)
bool test( int & a)
{
return (&a) == (int *) NULL;
}
int
main()
{
int * i = (int *)NULL;
cout << ( test(*i) ) << endl;
};
Le vrai problème que j'ai avec les références se trouve avec les autres programmeurs, désormais appelé IDIOTS, qui allouer, dans le constructeur, de libérer dans le destructeur, et ne parviennent pas à fournir un constructeur de copie ou de l'opérateur=().
Soudain, il y a un monde de différence entre les foo(BAR) et foo(BAR et bar). (Automatique bit à bit de l'opération de copie est appelé. Libération de la mémoire dans le destructeur est appelé deux fois.)
Heureusement, les compilateurs modernes pour reprendre le double de désallocation de la même pointeur. Il y a 15 ans, ils n'ont pas. (Gcc/g++, l'utilisation *setenv MALLOC_CHECK_ 0* de revoir les anciennes façons de faire.) Elle résulte, en vertu de l'DÉC UNIX, dans le même espace mémoire alloué à deux objets différents. Beaucoup de débogage plaisir...
Plus concrètement:
- Références cacher que vous modifiez les données stockées ailleurs.
- Il est facile de confondre une Référence à un objet Copié.
- Les pointeurs à l'évidence!