#include<iostream>
using namespace std;
#define SIZE 10
//普通变量
/*
开辟空间我们一般在堆区开发,堆区又称为自由存储区
malloc---->free;new----->delete
对于malloc开辟空间来说new开辟空间的优势
1-new开辟空间不用强制转换;
2-new开辟空间不用进行判空操作;
但是malloc开辟空间不用区分开辟的是数组空间和单个空间,然而
new开辟空间需要区分,delete对数组还是单个的空间进行释放的方式不同。
*/
class Test
{
public:
Test(int d=0):data(d)
{
cout<<"Create test object!"<<endl;
}
~Test()
{
cout<<"Free Test Object!"<<endl;
}
public:
void InitiObject()
{
//data =0;
cout<<"Init Object!"<<endl;
}
void Destroy()
{
cout<<"Destroy Object!"<<endl;
}
private:
//char *str;
int data ;
};
void main()
{
Test *pt =new Test(100);
delete pt;
Test *pa=new Test[10];
delete []pa;
//注意在这块delete的对象是一个数组,因此一定要加中括号
//若少了[]编译器会认为指向数组第一个元素导致回收不彻底。
//加了之后指向数组的指针,回收整个数组。
}
/*
void Use_Malloc_Free()
{
Test *pt = (Test*)malloc(sizeof(Test));
pt->InitiObject();//初始化;
pt->Destroy();
free(pt);
}
void Use_New_Delete()
{
Test *pt= new Test(100);//等价于c语言中先开辟空间 再初始化对象
delete pt; //等同于C语言中先摧毁对象 再释放对象
}
void main()
{
Use_Malloc_Free();
cout<<"------------------------------"<<endl;
Use_New_Delete();
}
/*
void main()
{
int *p=(int*)malloc(sizeof(int));
*p=10;
free(p);
int *q=new int(10);//在这块就体现了c++的高级,对p开辟空间后,同时对其进行初始化操作
//也就是把这个10放进去,但是malloc则不会对其进行初始化,只是仅仅开辟一个空间;
delete q;
}
*/
/*
void main()
{
int *p=(int*)malloc(sizeof(int)*SIZE);
if(p==NULL)
exit(1);
for(int i=0;i<10;++i)
{
p[i]=i+1;
}
free(p);
int *q=new int[10];
for(int j=0;j<10;++j)
{
q[j]=j+1;
}
delete []q;//该方括号代表此处释放的是一个数组空间;
}
//C语言中开辟空间
void fun(int n)
{
int *ar=(int*)malloc(sizeof(int)*n);
}
void main()
{
char ch;
int n,a;
cin>>n;
fun(n);
}
*/