0
假設您有一個稱爲Inst()
的私有靜態方法,該方法允許類在其靜態方法中檢索應用程序中的單個實例。也許研究所()的定義是這樣..與存儲在本地中相比檢索對象的開銷
return App::GetApp()->CurrentState()->MyClass(); // Inst returns a reference
比較這...
// I prefer this
Inst().DoThis();
Inst().DoThat();
Inst().DoFoo();
到...
MyClass inst = Inst();
inst.DoThis();
inst.DoThat();
inst.DoFoo();
在應用中的性能是相當的重要,是第一組函數中的開銷不重要?現代編譯器能夠優化這些東西嗎?
我意識到profiling會回答我的問題,但我在這裏尋找經驗法則。將現有數據存儲在局部變量中而不是重新檢索它有什麼好處,還是現代編譯器通常優化的這種重新檢索?
你的例子不同。第一個調用其他版本創建副本的引用上的函數。 – pmr 2010-07-14 20:28:01
謝謝,沒有意識到分配給一個參考做一個副本。 (雖然我實際上限制了類中的拷貝構造函數和賦值,所以編譯器會抓住它)。 – kroz 2010-07-14 20:36:27
它不。但是你沒有分配給_reference_('MyClass&inst'),但是你正在用它的拷貝構造函數('MyClass inst(const MyClass&)')初始化一個新的'MyClass'。 – 2010-07-14 20:42:29