c++内存管理

、C语言中,我们用malloc,realloc,calloc,free四种种函数来进行内存管理,而在c++中则用new和delete来进行内存开辟和管理。

	int* p1 = new int;
	int* p2 = new int(10);
	int* p3 = new int[10];
	
	delete p1;
	delete[] p3;

如果要开辟一个空间则使用p1方式,如果开辟一个连续的空间,则用p3的方式,如果要释放则需要相对应的格式。后面加小括号是初始化的方式,对应其构造函数。

但是为何要写出new和delete来开辟空间呢。
对于内置类型,与malloc等无差别,但是对于自定义类型,new会自动调用其构造函数,而delete也会调用析构函数,这是根本的不同点。

operator new operator delete
上面两个函数用法和malloc和free完全无差,但是区别在于,operator new对于开辟空间的失败会抛出异常,但是malloc会返回空,这是处理失败情况的不同点,也是两者的区别,free和operator delete是一样的。

类中可以定义专属的new和delete来提升效率。

所以new其实是等于构造函数+operator new
delete 是析构函数+operator delete

定位new
new(指针)构造函数(参数)给予已有的空间初始化,一般来说配合内存池使用,因为一般不会初始化。

malloc和new的区别
1 new会调用构造函数,失败抛异常,malloc失败返回0
2 malloc是一个函数,new是一个操作符
3 malloc传字节数,返回void*指针,new传类型,返回类型指针

内存泄露
p指向的空间不需要了,忘记或者其他原因没有释放。
危害,普通的内存泄露随着进程的结束,内存会被回收,但长期运行的程序,比如说游戏服务器,或者设备内存很小,比如手机,那么这样出现会造成很大的危害。

有一些内存泄漏检测的软件和智能指针可以处理解决。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值