C与C++堆内存的申请与释放
在C中,对堆内存的申请与释放依赖malloc和free两个函数,而在C++中依靠的是new和delete。两者既相似,又有所区别。
相同点:
1、malloc/free和new/delete都是用于堆内存管理。 2、两者的返回值都是地址形式 3、free和delete都不可以重复释放。
不同点:
1、malloc/free是C标准库函数,所以使用前需添加stdlib.h头文件,而new/delete是运算符(关键字),因此不需要头文件。 2、malloc返回值是void*,new返回的是带类型的地址。 3、malloc所跟参数是需要申请堆内存的字节数,而new 所跟的是类型。
void *malloc( size_t size );
void free( void *ptr );
类型* p = new 类型;
注意:new会自动计算字节数,且返回的是有类型的地址。
delete p;
类型* p = new 类型[n];
delete[n] p;
4、malloc分配内存失败时返回NULL,而new内存分配失败时,会出现bac_alloc异常。 5、使用new申请内存时,会自动调用构造函数,用delete释放内存时,会自动调用析构函数。而malloc和free则不会。 6、使用malloc申请内存时无法进行初始化,而new可以。
int* p = new int(123);
int* p = new int[5]{0,1,2,3,4};
注:new和delete底层调用的其实还是malloc和free
|