new/delete,new[]/delete[],malloc,free
来源:互联网 发布:vision是什么软件 编辑:程序博客网 时间:2024/06/05 19:07
1>malloc/free函数:(c语言实现动态内存分配)
注:free释放的是内存,不是指针。
2>new/delete操作符:(c++实现动态内存分配)
new 做了两件事:1. 调用operator new分配空间。2. 调用构造函数初始化对象。(失败后会抛出bad_alloc异常)
delete 也做了两件事:1. 调用析构函数清理对象 。2. 调用operator delete释放空间
new[N] 1. 调用operator new分配空间。2. 调用N次构造函数分别初始化每个对象。
delete[] 1.调用N次析构函数清理对象。2. 调用operator delete释放空间
注:malloc/free,new/delete,new[]/delete[],要成对使用,否则可能会出现内存泄漏的问题
3>operator new,operator delete
1) operator new/operator delete operator new[]/operator delete[] 和malloc/free用法一样。
2)他们只负责分配空间/释放空间,不会调用对象构造函数/析构函数来初始化/清理对象。
3)实际operator new和operator delete只是malloc和free的一层封装。
4>区别和联系
1)它们都是动态管理内存的入口。
2)malloc必须由我们自己计算字节数,返回 强转的实际类型的指针
new可以自己计算空间大小,并返回对象类型的指针(类型与对象匹配)
void test(){int* a = new int;//开辟一块大小为sizeof(int)的空间int* b = new int(3);//开辟一块大小为sizeof(int)的空间,并初始化为3int* c = new int[3];//开辟一块大小为sizeof(int)*3的空间delete a;delete b;delete[] c;}
4) malloc/free只是动态分配内存空间/释放空间,new/delete除了分配空间还会调用构造函数和析构函数进行初始化与清理(清理成员)。
5)若分配内存不够
malloc可使用realloc函数进行内存重新分配(realloc先预判当前指针所指向的内存是否有足够大的空间,如果没有,则按照新制定的大小来开辟一段空间,并将原来的值拷贝到新的内存,然后释放掉原来的空间)
new则没有这样的操作
6)申请失败返回值
new失败后会抛出bad_alloc异常,malloc 失败返回空指针NULL
- new delete malloc free
- malloc/free new/delete
- malloc, free, new , delete
- new delete malloc free
- 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
- new/delete malloc/free
- malloc/free new/delete
- new、delete、malloc、free
- new/malloc delete/free
- new delete malloc free
- new delete malloc free
- malloc-free new-delete
- 《参考ibase4J搭建属于自己的分布式架构》---2.使用maven配置多个环境并运行项目
- install openjdk-7-jdk
- 【Machine Learning】笔记:anomaly detection
- numpy.ndarray 如何转化为 list
- 8.7 暑假集训——树状数组篇
- new/delete,new[]/delete[],malloc,free
- 布局视图实现点击波纹效果
- 文件下载
- Windows下使用Visual Studio 2010 编译ffmpeg全过程
- 静态通讯录
- 【最长公共子序列】(LCS)
- 关于烂代码的那些事(上)
- 杭电acm 1418 (抱歉) 欧拉公式
- Linux上Oracle 11g安装步骤图解