当前位置: 首页 > article >正文

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申请的堆空间是以数据类型为单位的


http://www.kler.cn/a/563860.html

相关文章:

  • 常见锁类型介绍
  • <网络> 网络基础3
  • AI大模型-提示工程学习笔记20-多模态思维链提示
  • C++ STL(二)deque
  • JVM垃圾回收器深度底层原理分析与知识体系构建
  • 神经网络 - 激活函数(Sigmoid 型函数)
  • 利用粒子群算法(PSO)来优化BP神经网络的权值和阈值
  • Flutter_boost混编开发系统MethodChannel之坑
  • Redis与MySQL数据一致性问题解决方案
  • 数据结构秘籍(一)线性数据结构
  • 【深度解析】Java接入DeepSeek大模型:从零实现流式对话+多轮会话管理(完整项目实战) —— SpringBoot整合、API安全封装、性能优化全攻略
  • sklearn机器学习 Python代码通用模板
  • DevSecOps普及:安全与开发运维的深度融合
  • 工程实践中常见的几种设计模式解析及 C++ 实现
  • vue3使用iframe全屏展示pdf效果
  • Day11,Hot100(贪心算法)
  • android跳转到相册选择图片
  • 基于 Java 和 FFmpeg 的视频压缩与剪辑功能实现
  • Python客服机器人
  • auto.js例子之WebView多页面浏览器