malloc()/free()和new/delete的区别
2013-09-10 20:12
232 查看
以示例说明:
class Obj
{
public:
Obj()
{
cout<<"constructor"<<endl;
}
~Obj()
{
cout<<"destroy"<<endl;
}
}
void usemallocfree(void)
{
obj *a = (Obj *)malloc(sizeof(Obj));//申请动态内存
a->Initialize(); //初始化
//...
a->Destroy(); //清除工作
free(a); //释放内存
}
void UseNewDelete(void)
{
Obj *a = new Obj; //申请动态内存并调用构造函数来初始化
//...
delete a; //调用析构函数清除并且释放内存
}
类Obj的函数Initialize()模拟了构造函数的功能,函数Destroy()模拟了析构函数的功能。在函数usemallocfree()中,由于malloc()/free()不能调用构造函数和析构函数,必须调用成员函数Initialize()和Destroy来完成初始化和清除工作。
提示:不要企图使用malloc()/free()来完成动态对象的内存管理,应该使用new/delete。由于内部数据类型的”对象“没有构造与析构的过程,对它们来说malloc()/free()和new/delete是等价的。
区别:
(1)C++程序经常要调用C函数,C程序只能用malloc()/free()来管理动态内存
(2)使用new/delete更安全。new可以自动计算它要构造的对象的字节数量(包括成员边界调整而增加的填补字节和隐含成员),而malloc则不能;new直接返回目标类型的指针,不需要显式地转换类型,而malloc()则返回void*,必须首先显式地转换成目标类型后才能使用。
(3)可以自定义重载new/delete,实现富有”个性“的内存分配和释放策略。而malloc()/free()不能被任何类重载,否则就改变了标准的定义。
(4)一定情况下,malloc()/free()效率更高,某系STL实现版本内存分配器会采用malloc()/free()来进行存储管理。
class Obj
{
public:
Obj()
{
cout<<"constructor"<<endl;
}
~Obj()
{
cout<<"destroy"<<endl;
}
}
void usemallocfree(void)
{
obj *a = (Obj *)malloc(sizeof(Obj));//申请动态内存
a->Initialize(); //初始化
//...
a->Destroy(); //清除工作
free(a); //释放内存
}
void UseNewDelete(void)
{
Obj *a = new Obj; //申请动态内存并调用构造函数来初始化
//...
delete a; //调用析构函数清除并且释放内存
}
类Obj的函数Initialize()模拟了构造函数的功能,函数Destroy()模拟了析构函数的功能。在函数usemallocfree()中,由于malloc()/free()不能调用构造函数和析构函数,必须调用成员函数Initialize()和Destroy来完成初始化和清除工作。
提示:不要企图使用malloc()/free()来完成动态对象的内存管理,应该使用new/delete。由于内部数据类型的”对象“没有构造与析构的过程,对它们来说malloc()/free()和new/delete是等价的。
区别:
(1)C++程序经常要调用C函数,C程序只能用malloc()/free()来管理动态内存
(2)使用new/delete更安全。new可以自动计算它要构造的对象的字节数量(包括成员边界调整而增加的填补字节和隐含成员),而malloc则不能;new直接返回目标类型的指针,不需要显式地转换类型,而malloc()则返回void*,必须首先显式地转换成目标类型后才能使用。
(3)可以自定义重载new/delete,实现富有”个性“的内存分配和释放策略。而malloc()/free()不能被任何类重载,否则就改变了标准的定义。
(4)一定情况下,malloc()/free()效率更高,某系STL实现版本内存分配器会采用malloc()/free()来进行存储管理。
相关文章推荐
- malloc/free 跟new/delete的区别
- new/delete 与 malloc/free 的区别
- malloc/free 和 new/delete 的区别
- new/delete 与 malloc/free 的区别
- new/delete和malloc/free的区别
- new/delete和malloc/free的区别
- c++中的malloc/free 和 new/delete这两对的区别
- new/delete和malloc/free的区别
- new/delete和malloc/free区别与联系
- malloc/free和new/delete的区别
- malloc/free和new/delete的区别
- malloc/free和new/delete的区别
- malloc/free和new/delete的区别
- malloc/free和new/delete的区别和联系
- malloc/free 与new/delete 的区别
- malloc/free和new/delete的区别
- new/delete和malloc/free的区别
- malloc/free和new/delete的区别 http://blog.csdn.net/chance_wang/article/details/1609081
- malloc/free和new/delete的区别
- malloc/free和new/delete的区别和联系