c++内存管理

c++内存管理

我们在开始之前,先看一下这个代码,回答下问题
在这里插入图片描述
在这里插入图片描述

1.我们正在调试的代码—> 栈区
2.int flobalvar=1;----->全局变量,所有文件都能访问,数据段
3.static int staticGlobalvar=1;----->全局变量,本文件访问,数据段
4.static int staticvar=1;------>局部变量,生存的空间是整个程序运行期间,只能在局部进行访问,存储在静态区中
localvar=1;----->栈
num1----->栈

char2---->局部的数组,栈
*char2---->”abcd"是常量字符串,存储在常量区中(代码段) 但是他确实栈区
他是数组,字符串会将自己拷贝一份放进去
请添加图片描述

pchar3—> 局部变量,栈
*pchar3---->pchar3是指针,存的是地址,解引用之后就是一个字符串,常量区(代码段)
ptr1-----> 局部变量,栈区
*ptr1-----> 动态开辟的空间,堆区

我们写成的代码是在文件中的,也就是存储在磁盘

c++中动态内存的开辟与释放

new的使用和delete的使用

new的出现就是为了class来服务的,我们在自定义类型变量的时候,如果使用malloc只能开空间,不能初始化,这种看上去没什么,但是对于没有初始化的空间,在使用的时候还是很担心的
但是如果使用new就会自动调用构造函数,并在结束的时候调用析构函数

delete也是一样的,会调用析构函数并且释放空间

使用方法
int main()
{
	int* a = new int;//不初始化
	int* b = new int(1);//初始化
	int* c = new int[4];//不初始化数组
	int* d = new int[4]{ 1,2,3,4 };//初始化数组

	int(*e)[5] = new int[5][5];//定义二维数组

	return 0;
}
int main()
{
	//全缺省也会被认为是默认构造
	A* a = new A;
	A* b = new A(1);

	//数组有多少空间就调用多少次
	puts("---");
	A* c = new A[4]{ 1,2,3 };
	puts("---");
	A* d = new A[4]{ A(1),A(2),A(3) };
	puts("---");
	A(*e)[2] = new A[2][2];

	delete a;
	delete b;
	puts("---");
	delete[] c;
	puts("---");
	delete[] d;
	puts("---");
	delete[5] e;

	return 0;
}

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值