本文已参与「新人创作礼」活动,一起开启掘金创作之路。
经常用C++,虽然很多文字描述的很清楚,对象的内存布局:比如代码区,用户内存区,静态数据区之类的,然则,还是不够形象,清晰,理解上难免有误,下面通过一段最简单的C++对象代码来解释C++的对象模型。
例子如下:
1 #include <string>
2 #include <iostream>
3 using namespace std;
4 class Student{
5 private:
6 static int stuNum;
7 string name;
8 int age;
9
10 public:
11 Student(string name, int age);
12 ~Student();
13 string getName();
14 int getAge();
15
16 };
root@maokx:~/learn/objectModel# vim student.cpp
1 #include "student.h"
2
3 Student::Student(string name, int age)
4 {
5 cout<<"Student"<<endl;
6 this->name = name;
7 this->age = age;
8 }
9
10 Student::~Student()
11 {
12 cout<<"~Student"<<endl;
13 }
14
15 string Student::getName()
16 {
17 cout<<"name is "<< name <<endl;
18 return this->name;
19 }
20
21 int Student::getAge()
22 {
23 cout<<"age is "<< age <<endl;
24 return this->age;
25 }
26
27 1 #include "student.h"
2
3 int main()
4 {
5 string name1 = "xiaoli";
6 Student stu1(name1, 19);
7 stu1.getName();
8
9 string name2 = "xiaowang";
10 Student stu2(name2, 20);
11 stu2.getName();
12 }
root@mkx:~/learn/objectModel# g++ main.cpp student.cpp student.h -o mainObject
root@mkx:~/learn/objectModel# ./mainObject
Student
name is xiaoli
Student
name is xiaowang
~Student
~Student
root@mkx:~/learn/objectModel#
上面这些代码,可以说是最简单的C++对象代码了,其内存模型如下:
通过对象内存模型可知:
其实,区分对象的是成员变量,每一个对象都有自己的成员变量;静态变量位位于全局静态数据区,代码呢,是共享的,位于代码区。
这与我以往感觉代码应该每一个对象一份的感觉是不同的,事实不是这样的。
掌握了对象内存模型,就能很好的处理很多问题了,比如线程安全之类的。
欢迎大家批评指正