您的位置:首页 > 其它

关于new和malloc以及delete和free能否够混用

2017-05-24 15:46 1216 查看
/*

*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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: