malloc是c中分配动态空间的方式之一,free是释放分配的动态空间的方法。
但是呢,我们可以通过malloc来分配一段非常大的空间,free的时候仅仅是传递了应该指针作为参数,没有指出要收回的范围大小。
例子:
int*a =(int*)malloc(sizeof(int)*10);
free(a);
这里呢,我们一共分配了40个字节的空间。但是,free的时候仅仅传递了一个int*a的指针。
一个指针代表了什么,类型能够代表一定的范围,而实际内容是地址。
所以通过指针,我们最多能释放一个int 也即是4个字节的大小。
实际上呢,在我们分配空间的时候,分配空间的首地址的前面的4个字节,也就是一个int类型中,保存了我们分配到大小,因此呢,这里我们就可以非常轻松的来释放空间了。
在说说new相较于malloc的不同,实际new运算符就是对malloc的一层封装而已,
例子:
string* a=new string("xiaoming");
如果把new作为一个函数看到话,string("xiaoming")都算是参数吧。
分析的过程:
第一步识别出后面的类型,根据类型来分配使用malloc分配相应空间,然后呢将malloc返回void类型指针转换成识别出的类型,怎么是被出来的呢
可以使用模板吧,应该可以的。使用字符串匹配也是可以的吧,虽然比价麻烦,仔细考虑的化,好像字符串匹配不行,因为自定义的类怎么识别
所以呢,这里只能模板了,然后通过指针来给分配的空间赋值,最会返回这个类型的指针。
实际上,new于malloc最大的区别就是它可以进行初始化的动作。