天天看點

c++之對象模型

成員函數和成員變量分開存儲

隻有非靜态成員變量才屬于對象上。

每個空對象占用的記憶體空間為:1。c++編譯器會給每個空對象也配置設定一個記憶體空間,是為了區分空對象占記憶體的位置。每個空對象應該有一個獨一無二的空間。

函數也不會占用對象空間,所有對象共享一個函數執行個體。

#include<iostream>
using namespace std;
class Person {
public:
    int m_a;
};
class Person1 {
public:
    int m_a;
    static int m_b;
};
void test() {
    Person p;
    Person1 p1;
    cout << sizeof(p) << endl;
    cout << sizeof(p1) << endl;
}
int main() {
    test();
    system("pause");
    return 0;
}           

複制

此時輸出:

1

4

4

說明了:空對象也是有1位元組的空間。靜态成員變量并不屬于特定的某一個對象,同理,靜态成員函數也不屬于某一個對象。進一步來說:所有對象共享一個成員函數執行個體。