C++拾遗--malloc free与new delete的同与不同
来源:互联网 发布:em算法应用实例 编辑:程序博客网 时间:2024/06/07 15:51
C++拾遗--malloc free与new delete的同与不同
前言
在C中我们常使用malloc和free来动态分配与释放内存,在C++中对应的是new和delete。这里我们来探讨下他们的同与不同。
正文
1.内置类型
对相同的代码进行调试,查看内存
#include <iostream>using namespace std;int main(){int *p = (int*)malloc(sizeof(int) * 10);cout << p << endl;//断点for (int i = 0; i < 10; i++)p[i] = i;//断点free(p);//断点cin.get();return 0;}
调试
同样的功能使用new和delete来操作
#include <iostream>using namespace std;int main(){int *p = new int[10];cout << p << endl;<span style="white-space:pre"></span>//断点for (int i = 0; i < 10; i++)p[i] = i;<span style="white-space:pre"></span>//断点delete[]p;<span style="white-space:pre"></span>//断点cin.get();return 0;}调式
对于内置类型,两组操作的效果是一样的。
2.类类型
代码一
#include <iostream>using namespace std;class MyClass{public:MyClass(){cout << "MyClass create" << endl;}~MyClass(){cout << "MyClass delete" << endl;}};int main(){MyClass *p1 = (MyClass *)malloc(sizeof(MyClass));free(p1);cout << "--------------------" << endl;MyClass *p2 = new MyClass;delete p2;cin.get();return 0;}运行
malloc 只是分配了内存,而new 不仅分配了内存,还调用了构造函数。
free 只是释放了内存,而delete不仅释放了内存,还调用了析构函数。
代码二
#include <iostream>#include <new>using namespace std;class MyClass{public:int *p;MyClass(){//分配400M内存p = new int[1024 * 1024 * 100];cout << "MyClass create" << endl;}~MyClass(){delete[]p;cout << "MyClass delete" << endl;}};int main(){MyClass *p1 = (MyClass *)malloc(sizeof(MyClass));//断点free(p1);//断点MyClass *p2 = new MyClass;//断点delete p2;//断点cin.get();return 0;}启动任务管理器,查看内存消耗
malloc free
new delete
由于malloc只是给变量p本身分配了内存,但由于不调用构造函数,所以无法让p指向一片分配的内存。同理,free只是释放了变量p,由于并不调用析构函数,所以无法释放p指向的内存。
本专栏目录
- C++拾遗 目录
所有内容的目录
- CCPP Blog 目录
1 0
- C++拾遗--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的区别
- 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的区别
- 【POJ 1562】 Oil Deposits
- 跨平台编译coocs2d-x工程
- file标签之保存文件
- 数组第二十二课,String类的常用方法
- dfs
- C++拾遗--malloc free与new delete的同与不同
- (五十九)iOS网络基础之UIWebView简易浏览器实现
- ubuntu下一些常用的命令
- 网球之李娜
- PAT1083 List Grades
- 我的2014-转折中前行
- 用python进行DNS(domain name system)查询(--查询报文的构建与发送)
- Webkit的自定义属性获取函数以及属性删除函数实现
- POJ 1426-Find The Multiple(bfs)