Je dois convertir un type intégral qui contient une adresse en type de pointeur réel. Je pourrais utiliser reinterpret_cast comme suit:C++: moyen sûr de convertir un entier en pointeur
MyClass *mc1 = reinterpret_cast<MyClass*>(the_integer);
Cependant, cela n'effectue aucun contrôle d'exécution pour voir si l'adresse en question tient en fait un objet MyClass. Je veux savoir s'il y a un avantage à convertir d'abord en un void * (en utilisant reinterpret_cast) puis en utilisant dynamic_cast sur le résultat. Comme ceci:
void *p = reinterpret_cast<void*>(the_integer);
MyClass *mc1 = dynamic_cast<MyClass*>(p);
assert(mc1 != NULL);
Y at-il un avantage à utiliser la seconde méthode?
La deuxième méthode n'est pas légale C++, le type de l'expression à dynamic_cast peut ne pas être vide *. –
En supposant que la valeur entière était à l'origine un pointeur sur un objet. Un int ne peut potentiellement pas contenir le pointeur. C'est pourquoi nous avons void *. Si vous lancez des pointeurs pour le transport à travers une frontière non typée, vous devez les convertir en void * et revenir au type d'origine. –
Il n'a pas dit 'int' spécifiquement, le type pourrait être intptr_t. –