写点什么

[C++ 总结记录] 对象内存占用情况及 this 指针注意点

用户头像
图解AI
关注
发布于: 2021 年 03 月 24 日
[C++总结记录]对象内存占用情况及this指针注意点

1. 对象的内存占用

  • 1)空类占用一个字节空间大小

class Cat {
};Cat c1;cout << sizeof(c1) << endl; //1个字节
复制代码
  • 2) 静态成员变量、静态成员函数不占对象空间

class Cat {public:	static int a;};int Cat::a = 20;int main() {
Cat c1; cout << sizeof(c1) << endl;//1个字节 return 0;}
复制代码

因为静态成员属性及静态成员函数,存储在静态区(全局区),不属于某个类对象所有,所以他是不占对象空间的


  • 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 成员)。


用户头像

图解AI

关注

技术成就未来 2021.03.22 加入

致力于:机器学习、深度学习、数据分析、算法、架构、C/C++、Rust、HTML5/webApp、Go、Python、Lua...

评论

发布
暂无评论
[C++总结记录]对象内存占用情况及this指针注意点