系統爲每個對象單獨分配存儲空間,佔用空間的是每個對象的數據部分,而共同的函數代碼段則只用一段空間來存放。因爲每個對象,其數據一般是不同的,但其函數代碼即所要進行的操作是相同的,沒有必要在內存中開闢10段空間來存放10個相同內容的函數代碼。
C++是通過this指針實現不同對象使用同一個函數代碼段分別對不同對象數據進行操作的,當調用對象時,this指針指向該對象,成員函數便訪問其成員。
對象所佔的空間大小隻取決於該對象中數據成員所佔的空間,而與成員函數無關。不論成員函數是否在類內定義,亦或是否聲明爲inline,成員函數均不佔用對象的存儲空間。
Notice:
1.類內定義的成員函數,可省略inline,隱含指定爲內置函數。若類外定義,並將其指定爲內置函數,需要inline顯示聲明。
2.聲明inline時,調用函數是將代碼賦值插入到函數調用點。否則,流程將轉去代碼的入口地址,執行完後返回到函數調用點。
總之,inline與成員函數是否佔用對象的存儲空間無關。