C++new

本文介绍了C++中如何使用new和delete进行堆内存的分配和释放。new用于开辟内存并可进行初始化,如`类型* 指针变量名 = new 类型(初始化数值);`,而delete则用于释放内存。使用delete后,指针应设为nullptr以防止悬挂指针。此外,new与malloc/free的主要区别在于new在申请失败时会抛出异常,而malloc只会返回NULL。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在 C++中堆内存的分配和释放是通过 new 和 delete 来操作的。使用方式如下
开辟内存: 类型* 指针变量名 = new 类型(初始化数值);
释放内存: delete 指针变量名;
new的三种调用规则:

int main()
{
	int* p = new int(10); // 运算符
	int* s = (int*)::operator new(sizeof(int)); // 函数
	new(s) int(10); // placement new 定位 new, 置位 new

	delete p;
	operator delete(s);

	return 0;
}

new的具体使用:

int main()
{
	int *ap = new int(10);//关键字	*ap = 20;
	cout << *ap << endl;
	delete ap;
	ap = NULL;//释放空间后要指向空

	//int *bp = new int[10](10);//遵循C11标准的编译器
	         //可以办到,开辟空间,同时将每个空间初始化 
	int *bp = new int[10];

	delete[]  bp;

	int *cp = (int *)::operator new(sizeof(int));
	new(cp) int(10);//不开辟空间,只是将指针指向的空间改值
					//称为定位new或者置位new
	cout << *cp << endl;
	operator delete(cp);

	return 0;
}

释放空间后,空间还给系统,空间里的值变成随机值,但是指针还是指向空间,要进行指针指向空,否则可能继续修改原指向空间的值
如下

int main()
{
	int *ap = new int(10);
	int *bp = ap;

	cout << *ap << '\t' << *bp << endl;
	delete ap;

	*ap = 20;
	cout << *ap << '\t' << *bp << endl;

	return 0;
}

运行截图
在这里插入图片描述

new和delete与malloc和free的区别:
int *ap = new int(10)中new是关键字,而malloc是函数并且malloc只能申请空间,不能初始化,申请失败返回NULL指针;new申请空间的时候可以进行初始化, 申请失败会抛出异常。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值