關於new和malloc以及delete和free是否可以混用
*1》當申請的空間是內建型別時,delete和free可以混用
*2》當申請的空間是自定義型別時,
* 1>若沒有解構函式,delete和malloc可以混用,有[]和沒有[]都相同
* 2>若申請的空間有解構函式時,malloc申請的空間可以用delete和free釋放,但是用delete釋放時不能加[]
* 3>若申請的空間有解構函式時,new申請的空間不能用free釋放,可以用delete釋放,但是釋放時必須加上[]
*/
#if 0
int main()
{
int a = 10;
int b = 20;
int *p = (int *)malloc(sizeof(int)*10);
int *p1 = new int[10];
free(p);
//free(p1);
//delete p;
delete p1;
return 0;
}
#endif
#if 1
class Test
{
private:
int ma;
public:
Test(int x=0):ma(x)
{}
~Test()
{
}
void fun()
{
cout<<"Test::fun"<<endl;
}
};
int main()
{
Test *p1 = (Test*)malloc(sizeof(Test)*10);
Test *p2 = new Test[10];
//free(p1);
//free(p2);
//delete p1;
//delete ((int *)p1-1);
delete ((int *)p2-1);
//delete []p2;
return 0;
}
#endif