C++的對象在內存中是怎麼表示的,數據成員和成員函數之間有什麼關係,this指針究竟是幹嗎的。函數
這裏不考慮虛函數表this
一個對象內存中佔的大小其實就是他的數據成員的大小spa
這是我用的例子指針
class T { public: T() {} void info() const { cout << "info\n"; } void printValue() const { cout << "value is " << m_value << '\n'; } void fun() const { cout << "fun!\n"; } private: int m_value; };
那麼成員函數類是共用一份代碼,可是咱們在使用的時候,爲何感受是每一個對象都本身有一份,這和兩個方面有緣由。咱們在施加一個動做給一個對象時,這個對象的狀態只能由它的數據成員可以記錄和表示,咱們在須要施加操做的對象身上由它的對象的數據成員所表明的狀態是咱們預期的結果,是咱們感受是各自一份。還有就是this指針是形成假象的技術實現。code
int main() { T *p = NULL; p->info(); // p->printValue(); // t *p2 = NULL; // info(p2); // cout << sizeof(T) << endl; return 0; }
這樣的對象
它很好的運行了。內存
如今咱們寫了這一段代碼原型
struct t { int m_value; }; void info(const t *p) { cout << "info\n"; } void printValue(const t *p) { cout << "value is " << p->m_value << '\n'; }
int main() { // T *p = NULL; // p->info(); // p->printValue(); t *p2 = NULL; info(p2); // cout << sizeof(T) << endl; return 0; }
void printValue(const t *p)同樣
一個內存段錯誤。
class