2016-08-23 47 views
-1

我認爲這應該是一些基本的,但我找不到一個好的關鍵字來搜索它。是否實例化更多對象會導致更多成員函數的實例化?

如果相同的成員函數實例化的越來越多,將內存方式移動到管理器類會更好嗎?

+0

不是。這是一種常見的實現技術,將(參數)this參數作爲參數傳遞給非靜態成員函數 - 因此不會爲每個實例化對象「生成」代碼(某些thunk被排除)。 – Niall

+0

@Niall感謝您提供更全面的問答鏈接。你知道靜態成員函數會發生什麼嗎?他們是否默默地實現了一個名稱空間中的全局函數? – Sgene9

+0

類似的東西 - 它們與其他函數相同,但它們不會看到這個''不可見'',編譯器負責範圍/可見性和訪問。 – Niall

回答

1

對象的實例化僅爲對象的非靜態數據成員分配內存,而不是成員函數。

如果你有一個類的兩個對象,這並不意味着你也有兩個類的成員函數的副本,而是this指針被傳遞給非靜態成員函數來指定哪個對象是調用成員函數。

+0

你知道靜態成員函數會發生什麼嗎?他們是否默默地實現了一個名稱空間中的全局函數? – Sgene9

+0

不,我們仍然需要使用類或對象的名稱來訪問類的靜態成員函數,即'MyClass :: aStaticMemberFunction()',只是'this'指針不會傳遞給靜態成員函數。 –