加qq1126137994 微信:liu1126137994 一起学习更多技术!!!

1、new与malloc的区别:

  1. new是关键字,它是C++语言的一部分,而malloc是由C库提供的函数
  2. new分配的内存的单位是具体的类型大小,而malloc以字节为单位分配内存
  3. new在分配内存空间时可以进行初始化,而malloc仅根据需要分配定量的内存空间
    看下面代码:
#include <iostream>
#include <string>
#include <cstdlib>using namespace std;class Test
{int* mp;
public:Test(){cout << "Test::Test()" << endl;mp = new int(100);cout << *mp << endl;}~Test(){delete mp;cout << "~Test::Test()" << endl;}
};int main()
{Test* pn = new Test;Test* pm = (Test*)malloc(sizeof(Test));delete pn;free(pm);return 0;
}

运行结果为:
Test::Test()
100
~Test::Test()

由运行结果得知:

  1. new能够触发构造函数的调用,malloc不行,它只能分配所需要的空间
  2. 对象的创建只能用new,而malloc不适合面向对象的开发
  3. new在所有的C++编译器中都可以使用,因为它是C++语言的关键字,是语言的一部分,而malloc是相关库函数,所以malloc在某些系统开发中是不能使用的

2、delete与free的区别
同样根据上面的函数以及运行结果可以知道,delete与free的区别:

  1. delete可以出发析构函数的调用,但是free仅归还之前申请的内存空间
  2. 对象的销毁只能用delete,free不适合面向对象的开发
  3. delete在所有C++编译器中都可以使用,而free在某些系统开发中不能使用

【C++深度剖析教程32】new/malloc区别 delete/free区别相关推荐

  1. 【C++深度剖析教程39】实现C++数组类模板

    上一篇文章在那个学习了多参数类模板与特化的分析:点击链接查看上一篇文章:类模板深度剖析 本篇文章学习记录: 数值型模板参数 实现C++数组类模板 1.模板中的数值型参数 模板参数可以是数值型参数.也就 ...

  2. 【C++深度剖析教程38】类模板深度剖析

    加qq1126137994 微信:liu1126137994 一起学习更多技术!!! 1.多参数类模板 类模板可以定义任意多个不同的类型参数 类模板可以被特化: 指定类模板的特定实现 部分类型参数必须 ...

  3. 人和猴子没有可比性:从3个层面深度剖析UNI和CEX平台币的本质区别

    (图片来源于网络) 最近比特币一波熊,DeFi板块大涨,DEX龙头Uniswap的治理代币UNI一度站上12刀,最高触及12.9刀的历史高位,较之于2020/11初的低点1.76刀,短短三个月不到,已 ...

  4. 【C++深度剖析教程29】C++对象模型分析下

    加qq1126137994,微信:liu1126137994 一起学习更多技术!!! 今天来继续学习C++对象模型! 在C++编译器内部,类可以理解为结构体 子类是由父类成员叠加子类新成员得到的 下面 ...

  5. 【C++深度剖析教程28】C++对象模型分析

    学习交流加 个人qq: 1126137994 个人微信: liu1126137994 学习交流资源分享qq群: 962535112 今天记录学习的内容是:C++对象模型分析!!! 本质分析: clas ...

  6. 【C++深度剖析教程25】继承中的构造与析构

    今天来学习C++中继承的构造与析构,有兴趣一起学习的加qq:1126137994 1.问题 如何初始化父类成员?父类构造函数与子类构造函数有什么关系? 子类对象是如何构造的? 子类中可以定义构造函数 ...

  7. 【C++深度剖析教程19】前置操作符与后置操作符

    今天来学习C++中的前置操作符(++i)与后置操作符(i++). 一回顾 以前在C语言的理论课程中,我们就学过,前置和后置操作符,有一定的区别: 但是我们可以看到下图,发现前置和后置++的操作符所对应 ...

  8. 【C++深度剖析教程9】初探C++标准库

    在这之前,我写的C++程序不能叫做标准的C++程序,因为里面写的大多数还带有C语言的影子.今天我们来学习C++标准库. 首先看一下例子:操作符<<的原生意义是按位左移.那么我们重载这个操作 ...

  9. 【C++深度剖析教程7】C++之类中的函数重载

    函数重载的回顾(接上一篇文章): 函数重载的本质为相互独立的不同的函数 C++中通过函数名和函数参数确定函数调用 无法直接通过函数名得到重载函数的入口地址 函数重载必然发生在同一个作用域中 类中的成员 ...

最新文章

  1. 总结整理Matlab的plot函数用法
  2. sklearn 学习曲线Learning Curve和 validation_curve
  3. 蚂蚁金服大规模分布式事务实践和开源历程
  4. ASP.NET的地址重写“.NET研究”(URLRewriter)实现原理及代码示例
  5. hdmi-cec_如何使用HDMI-CEC使用PlayStation 4或Pro自动打开电视
  6. YbtOJ#20089-[NOIP2020模拟赛B组Day10]平衡的树【贪心】
  7. webpack打包测试_webpack入门笔记(一)
  8. 搭建小程序表情包教程
  9. python安装pip_解决Python安装下载及Python环境的配置(pip,flake8,yapf)
  10. Unity 性能优化经验整理
  11. Sigfox的物联网生意经:弱水三千只取一瓢饮
  12. 如何用油猴提升前端开发效率
  13. linux 快速建网站,如何快速建站,新手快速搭建网站教程
  14. 《明解C语言》第九章字符串课后练习题
  15. 【WIN10】win10更改以太网名称以及以太网下网络名称
  16. Java遍历Map集合的第二种方法Entry对象遍历Map集合内元素
  17. 少年宫计算机室管理制度,乡村学校少年宫计算机课程安排
  18. vue项目图片插入不清晰,原因分析及解决办法
  19. Linux/Windows 平台最容易安装 Composer教程
  20. 小程序wxml使用js函数

热门文章

  1. 第十九期:HTTPS虐我千百遍,我却待她如初恋!
  2. git仓库的基本用法
  3. java容器集合类的区别用法_Java容器笔记(二):不同集合实现类的特点与区别...
  4. php代码里怎么写html代码_菜鸟青铜变白银!Python 项目代码写完了,然后怎么打包和发布?...
  5. ssh登录服务器提示错误no hostkey alg
  6. [Python] 制作启动uiautomator2 的web版 uiautomatorviewer2 批处理启动
  7. PHP_CodeIgniter _remap重新定义方法
  8. Ribbon自带负载均衡策略比较
  9. 检索 COM 类工厂中 CLSID 为 {000209FF-0000-0000-C000-000000000046} 的组件时失败,原因是出现以下错误: 80070005...
  10. HOJ 2678 Stars