深入理解C++动态内存管理:malloc/free和new/delete的区别和联系
来源:互联网 发布:李小璐的淘宝店铺 编辑:程序博客网 时间:2024/05/16 08:33
malloc/free 和 new/delete
相同点:都可以用于申请动态内存和释放内存。申请的内存都在堆上分配。
不同点:1、new/delete是C++的操作符,而malloc/free是C中的函数。
2、new做两件事,一是分配内存,二是调用类的构造函数;同样,delete会调用类的析构函数和释放内存。而malloc和free只是分配和释放内存。
3、new建立的是一个对象,而malloc分配的是一块内存;new建立的对象可以用成员函数访问,不要直接访问它的地址空间;malloc分配的是一块内存区域,用指针访问,可以在里面移动指针;new出来的指针是带有类型信息的,而malloc返回的是void指针。
4、new/delete是保留字,不需要头文件支持;malloc/free需要头文件库函数支持。
联系:既然new/delete的功能完全覆盖了malloc/free,为什么C++还保留malloc/free呢?因为C++程序经常要调用C函数,而C程序只能用malloc/free管理动态内存。如果用free释放“new创建的动态对象”,那么该对象因无法执行析构函数而可能导致程序内存泄漏出错。如果用delete释放“malloc申请的动态内存”,理论上讲程序不会出错,但是该程序的可读性很差。
所以new/delete,malloc/free必须配对使用。
示例:
class Array{public :Array(size_t size = 10): _size(size), _a(0){cout << "Array(size_t size)" << endl;if (_size > 0){_a = new int[size];}} ~Array(){cout << "~Array()" << endl;if (_a){delete[] _a;_a = 0;_size = 0;}}private:int*_a;size_t _size;};void Test(){Array* p1 = (Array*)malloc(sizeof (Array));Array* p2 = new Array; Array* p3 = new Array(20);Array* p4 = new Array[10];free(p1);delete p2;delete p3;delete[] p4;}
0 0
- 深入理解C++动态内存管理:malloc/free和new/delete的区别和联系
- 动态内存分配- new/delete 和malloc/free的区别
- new/delete 和malloc/free 的区别和联系
- new/delete 和malloc/free 的区别和联系
- malloc free和new delete的区别和联系
- new/delete和malloc/free的区别和联系
- 整理:new/delete和malloc/free的区别和联系
- malloc free和new delete的区别和联系
- malloc/free和new/delete的区别和联系
- malloc/free和new/delete的区别和联系
- malloc/free 和 new/delete的联系和区别
- new/delete和malloc/free的区别和联系
- malloc free与new delete的区别和联系
- new/delete与malloc/free之间的联系和区别
- 动态内存开辟:new/delete,malloc/free区别与联系
- new/delete和malloc/free的区别深入解析
- new/delete和malloc/free的区别,sizeof的理解和struct内存对齐
- [C/C++] malloc/free和new/delete的区别
- 项目中可能遇到的问题
- 【笔记】电商网站, 用户可以自定义推荐橱窗的个数, 实现商品推荐的大体思路
- hdu 1556 Color the ball(树状数组)
- web回顾(4.25)
- oracle执行update和insert语句卡住不动
- 深入理解C++动态内存管理:malloc/free和new/delete的区别和联系
- c++: dynamic_cast详解
- 迷宫
- java——网络编程
- 剑指offer_面试题10_二进制中1的个数(位运算)
- github+hexo搭建个人博客
- flannel 实战与源码分析(四)
- Android中样式
- 淘宝搜索分析系统Pora2的应用之HBase高并发读写性能优化