Supposons que vous ayez une méthode statique privée appelée Inst()
qui permet à la classe de récupérer l'instance unique de lui-même dans l'application dans ses méthodes statiques. Peut-être Inst() est défini comme quelque chose ..Frais généraux de récupération d'un objet par rapport au stockage en local
return App::GetApp()->CurrentState()->MyClass(); // Inst returns a reference
... Comparer ce
// I prefer this
Inst().DoThis();
Inst().DoThat();
Inst().DoFoo();
à ...
MyClass inst = Inst();
inst.DoThis();
inst.DoThat();
inst.DoFoo();
Dans une application où la performance est assez importante, est le surcoût dans le premier ensemble de fonctions non-trivial? Les compilateurs modernes sont-ils capables d'optimiser ces choses?
Je réalise que le profilage répondrait à ma question dans mon cas, mais je cherche une règle empirique ici. A quel point est-il bénéfique de stocker des données existantes dans une variable locale plutôt que de la retrouver, ou est-ce que cette ré-extraction est généralement optimisée par les compilateurs modernes?
Vos exemples diffèrent. Le premier appelle les fonctions sur la référence, l'autre version en fait une copie. – pmr
Merci, n'a pas réalisé que l'attribution à une référence fait une copie. (Bien que je restreignais effectivement le constructeur et l'assignation de copie dans la classe ainsi le compilateur l'aurait attrapé). – kroz
Ce n'est pas le cas. Mais vous n'assignez pas à un _reference_ ('MyClass & inst'), mais vous initialisez un nouveau' MyClass' avec son constructeur de copie ('MyClass inst (const MyClass &)'). –