您的位置:首页 > 其它

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