C++学习01
程序的内存模型
1.内存四区
代码区、全局区、栈区、堆区(代码区和全局区在程序执行前就有)
2.简单介绍
2.1 代码区:
存放CPU执行的机器指令
代码区是共享的,也是只读的。
2.2 全局区:
存放了全局变量(在main函数之外)、静态变量(前面有static)
其中还包含了常量区。(包括字符串常量、const修饰的全局常量)
该区的数据在程序结束后由操作系统释放。
2.3 栈区:
由编译器自动分配释放(函数执行完)
存放函数的参数值(形参)、局部变量等(不要返回局部变量的地址!!)
2.4 堆区:
由程序员分配释放,若不释放,则被系统回收
主要用new关键字在该区开辟数据,用delete关键字释放内存。
new返回的是数据类型的指针。
释放数组时(eg. delete[] arr;)
构造函数&析构函数
构造函数用于初始化对象,同时为对象的成员属性赋值;析构函数用于清理对象,同时在对象销毁前调用执行清理工作。
语法
2.1 构造函数:类名(){}
2.1.1.构造函数,没有返回值也不写void
2.1.2.构造函数可以有参数,可以发生重载
2.2 析构函数:~类名(){}
2.2.1.析构函数,没有返回值也不写void
2.2.2.析构函数不可以有参数,不可以发生重载
3.构造函数的分类&调用
3.1 分类一(按照参数)
3.1.1.无参构造(默认构造)
3.1.2.有参构造
3.2 分类二(按照类型)
3.2.1.普通构造
3.2.2.拷贝构造:
1 |
|
3.3 调用
3.3.1.括号法:
1 |
|
3.3.2.显示法:
1 |
|
3.3.3.隐式转换法:
1 |
|
3.4 深拷贝&浅拷贝
3.4.1.浅拷贝:简单的赋值拷贝操作(存在的问题:使堆区的内存重复释放)
3.4.2.深拷贝:在堆区重新申请空间,从而进行拷贝操作
3.4.3.示例:
1 |
|
const修饰成员函数
常函数:
1.成员函数后加const,称之为常函数
2.常函数内不可以修改成员属性
3.成员属性声明时加关键字mutable,在常函数中依然可以修改
常对象:
1.声明对象前加const,称为常对象
2.常对象只能调用常函数