C语言基础——new/delete与malloc/free比较
来源:互联网 发布:剑3唐门成男捏脸数据 编辑:程序博客网 时间:2024/05/16 20:30
1、本质区别
malloc/free是C/C++语言的标准库函数,new/delete是C++的运算符。
对于用户自定义的对象而言,用maloc/free无法满足动态管理对象的要求。对象在创建的同时要自动执行构造函数,对象在消亡之前要自动执行析构函数。由于malloc/free是库函数而不是运算符,不在编译器控制权限之内,不能够把执行构造函数和析构函数的任务强加于malloc/free。因此C++需要一个能完成动态内存分配和初始化工作的运算符new,以及一个能完成清理与释放内存工作的运算符delete。
2、联系
既然new/delete的功能完全覆盖了malloc/free,为什么C++还保留malloc/free呢?因为C++程序经常要调用C函数,而C 程序只能用malloc/free管理动态内存。如果用free释放“new创建的动态对象”,那么该对象因无法执行析构函数而可能导致程序出错。如果用delete释放“malloc申请的动态内存”,理论上讲程序不会出错,但是该程序的可读性很差。所以new/delete,malloc/free必须配对使用。
malloc/free是C/C++语言的标准库函数,new/delete是C++的运算符。
对于用户自定义的对象而言,用maloc/free无法满足动态管理对象的要求。对象在创建的同时要自动执行构造函数,对象在消亡之前要自动执行析构函数。由于malloc/free是库函数而不是运算符,不在编译器控制权限之内,不能够把执行构造函数和析构函数的任务强加于malloc/free。因此C++需要一个能完成动态内存分配和初始化工作的运算符new,以及一个能完成清理与释放内存工作的运算符delete。
2、联系
既然new/delete的功能完全覆盖了malloc/free,为什么C++还保留malloc/free呢?因为C++程序经常要调用C函数,而C 程序只能用malloc/free管理动态内存。如果用free释放“new创建的动态对象”,那么该对象因无法执行析构函数而可能导致程序出错。如果用delete释放“malloc申请的动态内存”,理论上讲程序不会出错,但是该程序的可读性很差。所以new/delete,malloc/free必须配对使用。
0 0
- C语言基础——new/delete与malloc/free比较
- 内存管理——关于malloc/free与new/delete
- C++进阶—>malloc/free与new/delete的区别
- malloc/free与new/delete
- malloc/free与new/delete
- 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
- malloc、free与new、delete
- new/delete ,malloc与free
- malloc/free与new/delete
- malloc/free与new/delete
- malloc&free与new&delete
- 宽屏透明html5产品展示模板
- mouseover事件与mouseenter事件
- 黑马程序员——交通灯管理系统学习总结
- 本文介绍在Wireshark网络协议分析仪中如果解密SSL和TLS流量
- hdu1978(记忆化搜索/DP)
- C语言基础——new/delete与malloc/free比较
- linux下查看系统资源和负载,以及性能监控
- git 使用
- Linux查看版本当前操作系统信息
- Linux 常用快捷键
- 八数码问题
- SEO教你软文怎样写才能招引用户与搜索引擎
- ZOJ 3781 Paint the Grid Reloaded
- 拖拽js和jq写法