new和delete操作符
C 语言中提供了 malloc 和 free 两个系统函数, 完成对堆内存的申请和释放。
而 C++则提供了两个操作符 new 和 delete。
1、 new
new 分配内存空间时, 分配内存空间大小可能会(一般都是)大于所
需空间大小。 因此, new 会分配至少申请大小的内存空间。
A、 开辟单变量地址空间
int *p = new int; //开辟大小至少为 sizeof(int)空间
int *a = new int(5); //开辟大小至少为 sizeof(int)空间, 并初始化为 5
int *a = new int(); //开辟大小至少为 sizeof(int)空间, 并值初始化为 0
B、 开辟数组空间
一维: int *a = new int[100];//开辟一个大小不少于 400 字节的整型数组空间
二维: int (*a)[6] = new int[5][6]
三维: int (*a)[5][6] = new int[3][5][6]
2、 delete
A、 释放单变量空间
int *a = new int;
delete a; //释放单个 int 的空间
B、 释放数组空间
int *a = new int[5];
delete []a; //释放 int 数组空间
C++中堆空间的分配和释放注意事项如下:
1、 new/delete 是关键字, 效率高于 malloc 和 free.
2、 配对使用, 避免内存泄漏和多重释放。
3、、 重点用在类对像的申请与释放。 申请的时候会调用构造函数完成初始化,
释放的时候, 会调用析构函数完成内存的清理。
malloc 与 new 的区别如下:
A、 new 是 C++关键字, malloc 是 C 语言库函数
B、 new 以具体类型为单位进行内存分配, malloc 以字节位单位分配内存
C、 new 在申请单个类型变量时可以进行初始化, malloc 不具备
D、 new 在所有 C++编译器中都支持, malloc 在某些系统开发中不可调用
E、 new 能够触发构造函数的调用, malloc 仅分配需要的内存空间
free 与 delete 的区别如下:
A、 delete 是 C++关键字, free 是库函数
B、 delete 在所有 C++编译器中都支持, free 在某些系统开发中不可调用
C、 delete 能够触发析构函数的调用, free 仅归还分配的内存空间
D、 对象的销毁只能使用 delete, free 不适合面向对象开发
E、 free 可以归还 new 申请的内存空间, 但不会调用析构函数, 可能会造成内
存泄漏
F、 delete 可以释放 malloc 分配的内存空间, 但会调用析构函数, 可能会造成其他
问题。
最新文章
- Raneto Docs(开源的知识库建站程序)
- inotifywait命令
- 【BZOJ-3156】防御准备 DP + 斜率优化
- LPCTSTR 用法
- Cocos2d-JS轻量级开发
- 玩死人不偿命的CLOUDSTACK
- 日常踩坑 searter
- Servlet&;JSP-HTTP服务器响应信息
- UDP和TCP的差异
- gradle配置国内镜像
- Python发送微信消息
- js函数 eql,equal,equalp
- M公司的回忆录——L公司
- Netty原理剖析
- UVa 11367 Full Tank? (DP + Dijkstra)
- [转]Multivariate Time Series Forecasting with LSTMs in Keras
- 数据库 proc编程八
- 前端工程化 - gulp
- apache伪静态设置
- (转)MySQL建表设置两个默认CURRENT_TIMESTAMP的技巧