c++内存管理

c语言内存函数


1malloc

2calloc  初始化为0

3realloc

4free

int* p1=(int*)malloc(sizeof(int));
int* p2=(int*)calloc(n,sizeof(int));
int* p3=(int*)realloc(ptr,sizeof(int));

c++内存管理

	int* p1 = new int;
	int* p2 = new int[];
	int* p3 = new int(10);//初始化为0
	 int *p4=new int[10]{1,2,3,4};//初始化1,2,3,4其他为0
	delete p1;
	delete []p2;

new和malloc区别


1new不是函数 是操作符重载 用法简洁
2new对内置类型基本一样 但可以初始化
3对于自定义类型 会开空间加调用构造函数和析构函数
        new会调用构造函数,delete会调用析构函数
4new失败后会抛异常,不用手动检查


operator new和operator delete函数


 A*p1=(A*)malloc(sizeof(A));
 A*p1=(A*)operator new(sizeof(A));


特性

1operator new 实际用malloc申请空间,申请失败后尝试执行空间不足应对措施
如果应对措施用户设置了,继续申请,否则抛异常
2operator delete 最终是通过free释放空间

new delete实现原理


对于内置类型 
区别 new申请空间失败会抛异常,malloc会返回NULL
 
对于自定义类型,
new 
1调用operator new函数申请空间(先
2在申请的空间执行构造函数(后

delete
1在空间上进行析构函数(先
2通过operator delete释放空间(后

以下了解即可:正常使用还是要匹配使用

int main()
{
    char* p = new char[100];
    delete []p;//内置类型 
 delete p;没区别
}

ClassA *pclassa=new ClassA[5];//取决于编译器:在 开辟的内存前四个字节储存对象个数
delete pclassa;//从四个字节后析构

delete []pclassa;//从从四个字节前析构

new/malloc和delete/free

共同点


都是在堆上申请空间,都需要用户手动释放内存


不同点


1new是操作符 malloc是函数
2malloc 申请的空间不会初始化,new可以初始化
3malloc申请空间失败返回NULL,new申请失败抛异常
4对自定义类型
new开空间加调用构造函数,delete调用析构函数后释放空间

内存泄漏 


由于错误或疏忽 导致程序未能释放不再使用的内存
        失去了对内存的控制 造成内存的浪费
危害:长期内存泄漏,会是系统的响应越来越慢

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值