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 分配的内存空间, 但会调用析构函数, 可能会造成其他
问题。

最新文章

  1. Raneto Docs(开源的知识库建站程序)
  2. inotifywait命令
  3. 【BZOJ-3156】防御准备 DP + 斜率优化
  4. LPCTSTR 用法
  5. Cocos2d-JS轻量级开发
  6. 玩死人不偿命的CLOUDSTACK
  7. 日常踩坑 searter
  8. Servlet&JSP-HTTP服务器响应信息
  9. UDP和TCP的差异
  10. gradle配置国内镜像
  11. Python发送微信消息
  12. js函数 eql,equal,equalp
  13. M公司的回忆录——L公司
  14. Netty原理剖析
  15. UVa 11367 Full Tank? (DP + Dijkstra)
  16. [转]Multivariate Time Series Forecasting with LSTMs in Keras
  17. 数据库 proc编程八
  18. 前端工程化 - gulp
  19. apache伪静态设置
  20. (转)MySQL建表设置两个默认CURRENT_TIMESTAMP的技巧

热门文章

  1. KenBurns特效组件KenBurnsView
  2. nginx那些事儿
  3. Java性能调优zz
  4. sql关于对一个字段同时满足多条件判断来筛选查询
  5. Java并发编程(五)-- Java内存模型补充
  6. JavaScrip两个函数的设置为回调
  7. [P2704][NOI2001]炮兵阵地 (状态压缩)
  8. Java 调用 shell 脚本详解
  9. ISDN简记
  10. pygame-KidsCanCode系列jumpy-part11-角色动画(下)