C ++ 静态存储区+堆空间

静态存储区

特点:

1:生命周期很长,main函数开始之前就存在,main函数结束,才结束

2:同名变量的管理,与栈不一样(重名变量前提,作用域一样):

栈:遇到重名变量,语法错误
静态存储区:遇到重名变量,新声明的变量不再声明,而是直接引用之前声明的那个重名的变量

总结:静态存储区的相同作用域中,出现重名变量,后面变量直接引用前面的

static

延长生命周期:静态局部变量
限制作用域:静态全局变量

作用:将变量声明在静态存储区中

 全局变量:

放在静态存储区中
全局变量满足 静态存储区的特点

原全局变量的作用域:程序全局
加static,作用域:当前文件

类的成员属性 

静态成员属性,类的所有对象共享,认定为这个类的属性
访问这个属性,用类访问
class Stu,有一个 static string school
 Stu::school ;
zs.school ; 编译器优化成Stu::school ;

类的成员方法 

加上static,属于类的,通过类来调用,也可通过对象调用

普通和静态 成员函数区别:

1.静态成员函数不会自动入参this指针,没有this指针
2.so静态成员函数里,只能访问静态成员属性,不能访问非静态成员属性

动态内存分配(堆空间) 

C++ 为什么不沿用c语言的堆空间
也就是为什么不用 malloc 和 calloc 

malloc calloc 只会申请堆空间
不会在堆空间上构建对象 ,仅创建堆空间,不调用构造函数
用堆空间的目的:将一个对象声明在堆空间上,so构造函数必不可少

free 函数也不会调用对象的析构函数

 申请 堆空间+调用构造函数: new

new 类名:创建一个对应类大小的堆空间,并在堆空间上调用该类的构造函数

class Stu
Stu* s1 = new Stu                                无参构造函数
Stu* s1 = new Stu(参数1)                     单参构造函数
Stu* s2 = new Stu(参数1,参数2)            双参构造函数 

Stu* arr = new Stu[n]                  在堆空间上声明n个对象,形成数组
注意:申请数组的时候,只能调用无参构造函数,无法带参构造函数申请数组

double* b = new double        为普通数据创建堆空间
声明出来的堆空间,没有构造函数可调用,所以没有做初始化,指针指向的地址上是垃圾值

同时初始化:
int* a = new int(0) 申请堆空间,并将 *a 初始化0

释放 堆空间:delete 

Stu* s = new Stu
delete s 单个堆空间对象

Stu* arr = new Stu[5]
delete[] arr; 释放堆空间数组

malloc/free 和 new/delete 的区别

1:malloc/free 是函数, new/delete 是运算符

2:malloc/free仅申请堆空间,不调用构造函数
      new/delete即申请堆空间,又调用构造函数

3:malloc申请的堆空间是以字节为单位的,
      new申请的堆空间是以数据类型为单位的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值