c++学习笔记(四):c++中new delete关键字 VS c语言中malloc free函数

来源:互联网 发布:淘宝上的机油能买吗 编辑:程序博客网 时间:2024/05/16 11:36
 1 new delete 操作符号 c++的关键字,malloc free是c语言的库函数。
 2 new malloc都是在堆上分配内存  由delete free释放 。

分配释放基础类型 、数组类型时两者实现基本相同,分配释放对象时两者有根本区别对象:new操作符会自动的调用这个类的构造函数 、delete操作符会自动的调用这个类的析构函数。


new delete VS malloc free函数分配释放基础类型:

void Test1(){/int *p = (int *)malloc(sizeof(int)); free(p);int *p2 = new int; //相当于上面的*p2 = 101;printf("*p2:%d \n", *p2);delete p2;//分配内存的同时,初始化int *p3 = new int(100);delete p3;}

new delete VS malloc free函数分配释放数组类型:

void Test2(){int *p = (int *)malloc(10*sizeof(int));  //int a[10];p[0] = 1;free(p);int *p2 = new int[10] ;//int a[10];p2[0] = 1;p2[1] = 2;delete [] p2;}


 new delete VS malloc free函数分配释放对象类型:

class Test{public:Test(int mya, int myb){a = mya;b = myb;cout<<"构造函数,我被调用了"<<endl;}~Test(){cout<<"析构函数,我被调用了"<<endl;}int getA(){return a;}protected:private:int a;int b;};int getTestObj(Test **my){Test *p = new Test(1, 2);*my = p;return 0;}void Test3(){Test t1(1, 2);//在临时区分配内存//new + 类型  返回一个 内存首地址//new操作符也会自动的调用这个类的构造函数 、//delete自动的调用这个类的析构函数 //相当于我们可以手工控制类的对象的生命周期Test *p = new Test(1, 2);cout<<p->getA()<<endl;delete p;getTestObj(&p);delete p;}


0 0