博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C++ malloc new 的区别
阅读量:5173 次
发布时间:2019-06-13

本文共 662 字,大约阅读时间需要 2 分钟。

1,malloc与free是C++/C语言的标准库函数,new/delete是C++的运算符。它们都可用于申请动态内存和释放内存。  malloc实现了在堆内存管理中进行按需分配的机制,但是它不提供在C++中对像构造的支持; new 则是一个 在C++中同时完成堆内存按需分配支持和对像构造功能的运算符,由于c++中的运算符功能较C中的运算符在意义上作了扩展的,可以理解成函数调用 2,对于非内部数据类型的对象而言,光用maloc/free无法满足动态对象的要求。对象在创建的同时要自动执行构造函数,对象在消亡之前要自动执行析构函数。 由于malloc/free是库函数而不是运算符,不在编译器控制权限之内,不能够把执行构造函数和析构函数的任务强加于malloc/free。 3,因此C++语言需要一个能完成动态内存分配和初始化工作的运算符new,以一个能完成清理与释放内存工作的运算符delete。注意new/delete不是库函数。 4,C++程序经常要调用C函数,而C程序只能用malloc/free管理动态内存。 new 不止是分配内存,而且会调用类的构造函数,同理delete会调用类的析构函数; 而malloc则只分配内存,不会进行初始化类成员的工作,同样free也不会调用析构函数。 5、new可以认为是malloc加构造函数的执行。new出来的指针是直接带类型信息的。而malloc返回的都是void指针。

转载于:https://www.cnblogs.com/calamus/p/5877729.html

你可能感兴趣的文章
c++11 : range-based for loop
查看>>
中国农历2013,2014 (zz.IS2120@BG57IV3)
查看>>
用virtualenv建立独立虚拟环境 批量导入模块信息
查看>>
Sublime Text3 插件:convertToUTF8
查看>>
BZOJ4060 : [Cerc2012]Word equations
查看>>
hdu2089不要62(数位dp)
查看>>
JAVA输出最大值和最小值
查看>>
64位weblogic11g安装
查看>>
oracle、mysql、sql server等;流行数据库的链接驱动配置
查看>>
UvaLive 6664 Clock Hands
查看>>
PCB 周期计算采用 SQL 函数调用.net Dll 标量函数 实现
查看>>
Problem B: 取石子
查看>>
Python学习笔记001——Linux
查看>>
Vue: 常用指令
查看>>
简单介绍.Net3.0 中跨线程访问控件
查看>>
oracle imp 工具可能出现的问题
查看>>
bzoj1045题解
查看>>
学习Cocos2d的博客 --推荐
查看>>
SpringMVC中@RequestMapping参数设置
查看>>
lea实现加法
查看>>