C++动态内存管理
来源:互联网 发布:内存条js 编辑:程序博客网 时间:2024/05/22 23:42
1、malloc/free和new/delete之间关系和差异。
C通过malloc/free来管理动态内存,而C++通过new/delete管理动态内存。
malloc/free的使用方法与new/delete有所不同。
malloc/free:
malloc的函数原型为void *malloc(size_t size)new/delete:
new没有函数原型,因为new和delete都是C++中的关键字总结它们之间的关联与区别:
(1)它们都是用来管理动态内存的。
(2)new/delete,malloc/free都要成对出现,否则会造成内存泄漏的问题。
(3)malloc函数在使用时需要指定开辟空间大小,而且因为malloc函数返回值是void*,所以需要强制转换。
而new则会自己及计算空间大小,返回对应类型指针。
(4)malloc/free只负责开辟空间释放空间,而new/delete除了分配空间还会调用构造函数和析构函数进行初始化与清理(清理
成员)。
(5)malloc/free是C的库函数,而new/delete是C++的关键字。
2、剖析new/delete、new[]/delete[]到底做了些什么事情。
在C++中,new/delete开辟对象空间,new[]/delete[]开辟对象数组空间。
new[]的方括号中是数组中对象的个数(N),使用new[]开辟空间时,不仅要开辟N个空间,还需要在这N个空间之前开辟4个字节的空间,
用来存放N,以此来告诉编译器要调用多少次构造函数,多少次析构函数。这4个字节非常重要。
(1)new做了两件事:a. 调用operator new分配空间。
b. 调用构造函数初始化对象。
(2)delete也做了两件事
a. 调用析构函数清理对象
b. 调用operator delete释放空间
(3)new[N]
a. 调用operator new分配空间。
b. 调用N次构造函数分别初始化每个对象。
(4)delete[]
a. 调用N次析构函数清理对象。(思考这里怎么N是怎么来的?)
b. 调用operator delete释放空间。
我们可以用图表示出来-------
- 【C++】动态内存管理
- 【C++】动态内存管理
- 【C++】动态内存管理
- C语言动态内存管理
- c的动态内存管理
- C语言动态内存管理
- C语言动态内存管理
- C/C++动态内存管理
- C语言动态内存管理
- 【C++】C++动态内存管理
- C/C++动态内存管理
- c的动态内存管理
- C/C++动态内存管理
- c/c++动态内存管理
- C/C++动态内存管理
- C/C++动态内存管理
- C/C++动态内存管理
- C/C++动态内存管理
- Spark Streaming实现实时WordCount,DStream的使用,updateStateByKey(func)实现累计计算单词出现频率
- iOS SDK 瘦身技巧
- 一份Makefile的详解
- == 与 equals
- ifstream打印汉字乱码问题 UTF-8转GB2312
- C++动态内存管理
- 基于 Laradock 创建 Laravel 项目实例
- TensorFlow打印tensor值
- ARM汇编基础知识学习1(ARMV7 32位)
- Rxjava2中Concat操作符onNext,OnError,OnComplte的执行顺序
- Maven学习总结(41)——Maven依赖范围、传递、排除详解
- ubuntu16.04lts突然不能联网解决方法
- HDOJ2024C语言合法标识符
- USACO-Section2.2 Preface Numbering【暴力枚举】