[C++ 总结记录] 对象内存占用情况及 this 指针注意点
1. 对象的内存占用
1)空类占用一个字节空间大小
2) 静态成员变量、静态成员函数不占对象空间
因为静态成员属性及静态成员函数,存储在静态区(全局区),不属于某个类对象所有,所以他是不占对象空间的
3)非静态成员属性占用对象空间,属于对象所有,通过 this 区分具体的对象
```c
class Cat {
public:
static int a;
int num;
};
int Cat::a = 20;
int main() {
Cat c1;
cout << sizeof(c1) << endl; // 4 个字节
return 0;
}
```
4)非静态成员函数不占用对象空间,所有对象共享一个函数实例,通过 this 区别具体的对象
```c
class Cat {
public:
static int a;// 不占对象空间
int num; // 占用 4 个字节对象空间
void func() { // 不占对象空间
cout << "hello" << endl;
}
};
int Cat::a = 20;
```
2.this 总结
1) this 的解释
this 是 C++ 中的一个关键字,也是一个 const 指针,它指向当前对象,通过它可以访问当前对象的所有成员。
2)this 的特点
this 只能用在类的内部,通过 this 可以访问类的所有成员,包括 private、protected、public 属性的。
this 是一个指针,要用->来访问成员变量或成员函数。
this 作为隐式形参,本质上是成员函数的局部变量,所以只能用在成员函数的内部,并且只有在通过对象调用成员函数时才给 this 赋值。
3)this 注意事项
this 是 const 指针,它的值是不能被修改的,一切企图修改该指针的操作,如赋值、递增、递减等都是不允许的。
this 只能在成员函数内部使用,用在其他地方没有意义,也是非法的。
只有当对象被创建后 this 才有意义,因此不能在 static 成员函数中使用(后续会讲到 static 成员)。
评论