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