new关键字的用法

在C语言中开辟空间用malloc,释放用free。
malloc函数原型:
void *malloc(int size);
功能:分配长度为size字节的内存块。
在C++中开开辟空间用new关键字,释放用delete关键字。

C语言一维数组的开辟与释放

int* parr = (int*)malloc(sizeof(int)*10);
free(parr)

C++一维数组的开辟与释放

int* parr = new int[10];
delete[] parr;

C语言二维数组的开辟与释放

int** parr = (int**)malloc(sizeof(int*)*3);
for(int i = 0;i < 3;i++)
{
	parr[i] = (int*)malloc(sizeof(int)*4);
}
for(int i = 0;i < 3;i++)
{
	free(parr[i]);
}
free(parr);

C++二维数组的开辟与释放

int** parr = new int*[3]();
for(int i = 0;i < 3;i++)
{
	parr[i] = new int[4];
}
for(int i = 0;i < 3;i++)
{
	delete[] parr[i];
}
delete[] parr;

new和malloc的区别
1.new是关键字而malloc是函数
2.new返回值安全,malloc返回值不安全(半包含)
new操作符分配成功时,返回的是对象类型的指针,类型严格与对象匹配,无须进行类型转换,故new是符合类型安全性的操作符。而malloc内存分配成功则是返回void ,需要通过强制类型转换将void指针转换成我们需要的类型。
3.malloc只能开辟内存,new还可以初始化
4.new不需要计算开辟内存,malloc需要计算
5.new开辟失败,抛出异常;malloc开辟失败,返回NULL
6.是否需要指定内存大小
7.申请的内存所在位置不同:new操作符从自由存储区上为对象动态分配内存空间,而malloc从堆上动态分配内存。
自由存储区是C++基于new操作符的一个抽象概念,凡是通过new操作符进行内存申请该内存即为自由存储区。而堆是操作系统中的术语,是操作系统所维护的一块特殊内存,用于程序的内存动态分布。
自由存储区域是否能够是堆,这取决于operator new的实现细节。自由存储区不仅可以是堆还可以是静态存储区,这都看operator new在哪里为对象分配内存。
特别的,new甚至可以不为对象分配内存!定位new的功能可以办到这一点。


版权声明:本文为weixin_45730574原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。