本文最后更新于:2 个月前
c++类内成员的内存分配问题
写在前面
刚刚快手一面时问到了类内成员的内存分配问题,之前没有了解过,特来复盘。
正文
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| #include <iostream>
using namespace std;
class test { public: void start() { cout << "success" << endl; }
private: int _n; };
int main() { test* A = new test(); A->start();
test* B = nullptr; B->start();
system("pause"); return 0; }
|
结果如下:
由此可见,所有的函数都是存放在代码区的,不管是全局函数,还是成员函数。要是成员函数占用类的对象空间,那么定义一次类对象就有成员函数占用一段空间。
再来补充一下静态成员函数的存放问题,静态成员函数与一般成员函数的唯一区别就是没有this指针,因此不能访问非静态数据成员,就像我前面提到的,所有函数都存放在代码区,静态函数也不例外。所有有人一看到 static 这个单词就主观的认为是存放在全局数据区,那是不对的。
但要是在成员函数里面用到私有变量呢?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| #include <iostream>
using namespace std;
class test { public: void start() { cout << _n << endl; }
private: int _n; };
int main() { test* A = new test(); A->start();
test* B = nullptr; B->start();
system("pause"); return 0; }
|
编译期间直接报段错误。