1 new delete 操作符号 c++的关键字,malloc free是c语言的库函数。
2 new malloc都是在堆上分配内存 由delete free释放 。
new delete VS malloc free函数分配释放数组类型:
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;
}
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;
}