malloc/free 是c++/c的标准库函数,new/delete 是c++的运算符。两者都可以申请动态内存和释放内存。
对于非内部数据类型的对象而言,光用malloc/free是无法满足动态对象的要求的。对象在创建时需要自动调用构造函数,在消亡时需要调用析构函数。由于malloc/free是库函数而不是运算符,不在编译器的控制权限之内,不能把自动执行构造函数和析构函数的任务强加给malloc/free。举例说明:

#include <iostream>
#include <cstdlib>
using namespace std;
class A
{
public:
A(void);
~A(void);
};
A::A(void)
{
cout << "Initialize" << endl;
}
A::~A(void)
{
cout << "Destroy" << endl;
} int main()
{
A *a = (A *)malloc(sizeof(A) * );
free(a);
a = NULL;
cout << "***********" << endl;
A *b = new A[];
delete [] b;
}

运行结果

可以看出利用malloc/free来完成分配动态时,是无法自动调用构造和析构函数的。而new/free可以轻松胜任。

对于内部数据类型来说,因为其对对象没有构造与析构函数,因此二者是等价的。

malloc/free 与 new/delete 区别的更多相关文章

  1. malloc free 和new delete区别

    从网上看的学习之 1. malloc与free是C++/C语言的标准库函数,new/delete是C++的运算符,与"+“.”-“.”*“.”/“有一样的地位. 2. new/delete是 ...

  2. malloc/free与new/delete的区别

    相同点:都可用于申请动态内存和释放内存 不同点:(1)操作对象有所不同.malloc与free是C++/C 语言的标准库函数,new/delete 是C++的运算符.对于非内部数据类的对象而言,光用m ...

  3. malloc/free和new/delete的区别汇总

    一.基本概念 malloc/free 1.函数原型及说明: void* malloc(long NumBytes):该函数分配了NumBytes个字节,并返回了指向这块内存的指针.如果分配失败,则返回 ...

  4. new和malloc区别,delete和delete []区别

    面试被问到上述问题,所以特地总结一下: 一.new和malloc的区别. 1.new可以返回指定类型的指针,并且自动分配内存大小:malloc需要计算手动计算分配空间的大小,并且返回值需要强转为实际类 ...

  5. malloc/free与new/delete的区别与联系

    相同点:(1)都是申请内存,释放内存,free和delete可以释放NULL指针:(2)都必须配对使用,这里的配对使用,可不能理解为一个new/malloc就对应一个delete/free,而是指在作 ...

  6. c++ 浅拷贝和深拷贝 指针和引用的区别 malloc(free)和new(delete)的区别 重载重写重定义

    4.malloc(free)和new(delete)的区别 malloc()函数: 1.1 malloc的全称是memory allocation,中文叫动态内存分配. 原型:extern void ...

  7. 百度笔试题:malloc/free与new/delete的区别(转)

    百度笔试题:malloc/free与new/delete的区别 相同点:都可以申请动态内存和释放内存. 不同点: (1) 操作对象有所不同: malloc和free是C/C++的标准库函数,new和d ...

  8. malloc/free和new/delete的区别

    转自:http://blog.csdn.net/chance_wang/article/details/1609081 malloc与free是C++/C语言的标准库函数,new/delete是C++ ...

  9. malloc,free和new,delete之间的区别

    1.malloc free 是c语言里面的,不过在c++中也能使用,这个只是申请的一块内存,一般不能申请对象的内存空间:2.new delete,是c++的,申请的也是一块内存,只是这个可以申请对象. ...

随机推荐

  1. XML--修改XML数据

    DECLARE @xmlDoc XMLset @xmlDoc='<root> <book id="0001"> <title>C# Progra ...

  2. C#使用LitJson对Json数据解析

    JSON 介绍 JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.它基于JavaScript(Standard ECMA-262 3rd Edition - ...

  3. sharepoint database 操作

    select *from [dbo].[AllLists] where tp_Title='Pages' and tp_WebId='90511126-E1FE-4E4C-8DDF-74DFC89E8 ...

  4. J - Judge(快速幂)(同余定理)

    J - Judge   Time Limit:1000MS     Memory Limit:131072KB     64bit IO Format:%lld & %llu Submit S ...

  5. SpringMVC框架 SpringMVC的获取01

    ---恢复内容开始--- SpringMVC通过实现MVC模式,很好地将数据.业务与展现进行了分离.从MVC的角度来说,SpringMVC和Struts2非常类似,但SpringMVC采用了可插拔的组 ...

  6. loadrunner代理录制

    loadrunner在使用过程中会受到浏览器版本的限制,有些web服务在低版本的浏览器上不能兼容,可通过代理录制的方式解决此问题. 注: (1)本文中的ip仅作示例,要按实际测试情况填写ip. (2) ...

  7. WEB H5 JS QRCode二维码快速自动生成

    万能的GITHUB: https://github.com/davidshimjs/qrcodejs HTML: <div class="col-xs-10 col-xs-offset ...

  8. python2 中 unicode 和 str 之间的转换及与python3 str 的区别

    在python2中字符串分为unicode 和 str 类型 Str To Unicode 使用decode(), 解码 Unicode To Str 使用encode(), 编码 返回数据给前端时需 ...

  9. 《快学Scala》第二章 控制结构和函数

  10. 【FAQ】调用接口序列化问题

    问题: Exception in thread "main" com.fasterxml.jackson.databind.JsonMappingException:Can not ...