Je ne suis vraiment pas certain que le C++ limite les erreurs de pointeurs. On peut faire des erreurs vraiment vicieuses avec l'héritage multiple. Un petit exemple : supposons qu'on ait une classe AB qui dérive d'une classe A et d'une classe B. Soit le code suivant :
AB* p_ab = NULL;
AB& ab = *p_ab;
B& b = static_cast<B&>(ab);
if (&b != NULL)
{
// LE TEST RETOURNE VRAI !
}
Eh bien oui dans l'exemple ci-dessus le test "if (&b != NULL)" est vrai. Pourtant, on pense avoir une référence sur un pointeur null, non ? Ce à quoi on ne pense pas, c'est que le static_cast a augmenté l'adresse de la référence de sizeof(A) octets. Par conséquent si "p_ab" était bien null, "&b" ne l'est plus. C'est pas vicieux ça ?
[^] # Re: Ça picote...
Posté par Jean Canazzi . En réponse à la dépêche La robustesse de nombreux navigateurs web mise en cause. Évalué à 2.
AB* p_ab = NULL;
AB& ab = *p_ab;
B& b = static_cast<B&>(ab);
if (&b != NULL)
{
// LE TEST RETOURNE VRAI !
}
Eh bien oui dans l'exemple ci-dessus le test "if (&b != NULL)" est vrai. Pourtant, on pense avoir une référence sur un pointeur null, non ? Ce à quoi on ne pense pas, c'est que le static_cast a augmenté l'adresse de la référence de sizeof(A) octets. Par conséquent si "p_ab" était bien null, "&b" ne l'est plus. C'est pas vicieux ça ?