new delete
1.malloc/calloc/realloc申请的空间只能由free释放,new申请的空间只能由delete释放。
malloc/calloc/realloc申请的空间与new申请的空间有对应类似cookie的描述控制,前者只能由free识别,后者只能由delete识别。
class Test
{
public:
Test()
{
cout<<"Create Test."<<endl;
}
~Test()
{
cout<<"Free Test."<<endl;
}
public:
void InitTest(int data)
{
m_data = data;
m_value = (int *)malloc(sizeof(int));
*m_value = data;
}
void DestroyTest()
{
free(m_value);
}
private:
int m_data;
int *m_value;
};
void main()
{
Test *pt = (Test*)malloc(sizeof(Test));
assert(pt != NULL);
pt->InitTest(100); //手动初始化
pt->DestroyTest(); //手动摧毁
free(pt);
}
class Test
{
public:
Test(int data=0)
{
cout<<"Create Test."<<endl;
m_data = data;
m_value = (int *)malloc(sizeof(int));
*m_value = data;
}
~Test()
{
cout<<"Free Test."<<endl;
free(m_value);
}
public:
void* operator new(size_t sz)
{
void *ptr = malloc(sz);
return ptr;
}
void operator delete(void *ptr)
{
free(ptr);
}
private:
int m_data;
int *m_value;
};
void main()
{
//1 malloc 2 调动构造函数
Test *pt = new Test(100);
//1 调动析构函数 2 free
delete pt;
/*new自动初始化,delete自动释放*/
int *ptr = (int*)malloc(sizeof(int) * 10);
free(ptr);
int *ptr1 = new int(10);
delete ptr1;
int *ptr2 = new int[10]{1,2,3,4,5,6,7,8,9,20};
delete []ptr2; //注意要加[]
}