深度剖析malloc、free和new、delete

1、malloc,free是C语言的函数,而new,delete是操作符,属于C++的语法,一定注意这两个不再是函数了,而是操作符。

2、malloc和new对于分配基础类型变量和数组变量,它们除了语法上有些区别,比如

demo

////分配基础类型int main(){// int *p = (int *)malloc(sizeof(int));*p = 10;//free(p);delete p;int *p2 = new int; //分配基础类型*p2 = 20;free(p2);//int *p3 = new int(30);printf("*p3:%d \n", *p3);//delete p3;free(p3);return 0;}//分配数组变量int main(){//c语言分配数组int *p = (int *)malloc(sizeof(int) * 10); //int array[10];p[0] = 1;//free(p);delete[] p;//c++分配数组 int *pArray = new int[10] ;pArray[1] = 2;//delete [] pArray; //数组不要把[] 忘记free(pArray);char *pArray2 = new char[25] ; //char buf[25]delete [] pArray2;return 0;}3、除了语法的区别,他们实际的作用没有什么不同,而且用malloc分配的可以用delete释放,new分配的也可以用free释放。但是对于类对象的分配,它们的区别比较明显

demo

class Test{public:Test(int _a){a = _a;cout<<"构造函数执行" <<endl;}~Test(){cout<<"析构函数执行" <<endl;}protected:private:int a;};//分配对象 new delete//相同和不同,new能执行类型构造函数,delete操作符,,能执行类的析构函数int main(){//c Test *pT1 = (Test *)malloc(sizeof(Test));//free(pT1);delete pT1;//c++Test *pT2 = new Test(10);//delete pT2;free(pT2);<span style="white-space:pre"></span>return 0;}用new和delete时,会分别调用类的构造函数和析构函数,而此时malloc和free就无力了。

即使是不成熟的尝试,也胜于胎死腹中的策略。

深度剖析malloc、free和new、delete

相关文章:

你感兴趣的文章:

标签云: