statique/dynamique de la fonte des références/objets
J'ai été jouer avec un tas de casting opérateurs de tout à l'heure, qui, apparemment, je n'ai pas vraiment à l'époque. J'étais à la recherche de plus de mon code maintenant et j'ai vu ceci:
Base(Derived &p_derived) : m_state(static_cast<Base>(p_derived).m_state){}
Je pense que j'ai maintenant une meilleure compréhension de la coulée de pointeurs et références grâce à un très bonne réponse ici sur stackoverflow, mais maintenant il y a les objets concernés. Ce qui se passe exactement lorsque la référence est coulé à un objet? Ou si p_derived a été l'objet lui-même et non pas seulement une référence? Serait-il créer de nouveaux objets et si oui, comment seraient-elles être instanciée?
Je suis aussi surpris que cela pourrait être compilé à tous depuis la Base.h, où ce code est trouvé, Dérivé est seulement vers l'avant a déclaré le sens qu'il ne sait pas qu'elle dérive de la Base. J'ai essayé à un autre endroit pour faire une statique de la fonte à partir d'un Dérivé* de Base*, mais ce serait à juste titre, de ne pas compiler en raison des types incompatibles dans la mesure où cette unité de traduction est en cause.
Vous devez vous connecter pour publier un commentaire.
Lorsque vous utilisez une référence, vous êtes généralement en fait l'utilisation de l'objet qu'il désigne. C'est la magie de la transparence de référence de la syntaxe que vous n'avez pas avec les pointeurs; sans doute, c'est leur raison d'être.
Ce scénario n'est pas une exception: vous prenez la
p_derived
arbitre et la construction d'une nouvelleBase
de via de le trancher.static_cast<Base&>(p_derived)
sera jeté la référence elle-même, si c'est ce que vous êtes après (et même si elle n'est pas :P).Oui, cela me surprend aussi. Êtes-vous sûr? (Démo /Démo - pas sûr que vous utilisez)
m_state(static_cast<Base*>(p_derived.m_state.get()))
ou similaires?Base
peut être construit à partir d'unDerived&
... que très constructeur est celui qui le rend si! Je me demande si vous avez certains de récursivité infinie dans ce initialiser en conséquence.