这里先对new和delete简单进行一下总结,然后再细说new和malloc的区别。
一、new和delete
C语言提供了malloc和free两个系统函数,完成对堆内存的申请和释放。而C++则提供了两个关键字new和delete;
1.1 规则
new/delete是关键字,效率高于malloc和free。
配对使用,避免内存泄漏和多重释放。
避免交叉使用,比如malloc申请空间delete释放,new出的空间被free。
new/delete 主要是用在类对象的申请和释放。申请的时候会调用构造器完成初始化,释放的时候,会调用析构器完成内存清理。
1.2 new/new[] 用法
//开辟单地址空间
int *p = new int; //开辟大小为sizeof(int)空间
int *q = new int(5); //开辟大小为sizeof(int)的空间,并初始化为5。
//开辟数组空间
//一维
int *a = new int[100]{0};//开辟大小为100的整型数组空间,并初始化为0。
//二维
int (*a)[6] = new int[5][6];
//三维
int (*a)[5][6] = new int[3][5][6];
//四维及以上以此类推。
1.3 delete/delete[] 用法
//释放单个int空间
int *a = new int;
delete a;
//释放int数组空间
int *b = new int