c++类内成员的内存分配问题

本文最后更新于: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;
}

结果如下:

1
2
success
success

由此可见,所有的函数都是存放在代码区的,不管是全局函数,还是成员函数。要是成员函数占用类的对象空间,那么定义一次类对象就有成员函数占用一段空间。

再来补充一下静态成员函数的存放问题,静态成员函数与一般成员函数的唯一区别就是没有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;
}

编译期间直接报段错误。