关于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
*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
相关文章推荐
- 关于new和malloc以及delete和free是否可以混用
- 关于malloc、free、new、delete以及calloc、realloc基本库函数与运载符的含义
- malloc/free和new/delete的主要区别以及c与c++关于结构体定义使用的区别
- new和delete以及malloc和free 二维数组
- new和delete、malloc和free之间的异同点以及用法实例
- new和malloc以及delete和free的区别
- 关于 C++ 的 new、delete 与 C 的 malloc、free 的区别
- malloc、free、new、delete以及堆和栈
- 关于new,delete与malloc,free的讨论
- 面试题----new/delete、malloc/free、new[]/delete[]的用法与区别以及new的三种使用方法
- new/delete和malloc/free区别,能否交叉使用
- new,delete和malloc,free以及allocator<T>
- 关于new,delete,malloc,free的一些总结
- 内存管理——关于malloc/free与new/delete
- 关于malloc/free与new/delete的区别
- 关于new/delete and malloc/free
- 关键字的简单总结:static、const、sizeof以及malloc和new、delete和free
- new,delete, malloc, free
- C++中有了malloc/free,为什么还要用new/delete
- Effective C++学习笔记:条款3:尽量用new和delete而不用malloc和free