Bonjour
On lit souvent que les références ne sont jamais nulles. C'est exact. On lit aussi que cela apporte une garantie car les pointeurs peuvent être NULL.
Pourtant on a vite fait de foutre la merde :
Le programme a un comportement indéterminé. Dans ce cas précis :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 #include <iostream> int main() { int * i = new int(5); int& ref = *i; delete i; std::cout << ref << std::endl; return 0; }
- Le programme fait n'importe quoi, et il ne plante pas.
- On a aucun moyen de tester la validité ou pas de la référence. Avec un pointeur NULL, au moins, on peut faire un test (même si on a aucune garantie lorsqu'il ne l'est pas).
Notons que DrMemory détecte bien le problème (je suppose que valgrind aussi).
D'accord, les références n'ont pas été pensées pour ce type d'usage,etc. Mais n'est ce pas un peu exagéré que dire que les références sont sûres et qu'elles apportent une garantie de validité de l'appel ?
Partager