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

new和delete操作符的更多相关文章

  1. Javascript的变量与delete操作符

    原文:http://charlee.li/javascript-variables-and-delete-operator.html 刚刚看到一篇好文(原文链接), 对Javascript中的dele ...

  2. javascript之delete操作符

    理解delete 理论 代码段的类型 执行上下文 活动对象 / 变量对象 属性的特性 内置属性与 DontDelete 未声明的赋值 Firebug的困惑 在eval中删除变量 浏览器兼容性 Geck ...

  3. C++ 重载new和delete操作符

    原因: C++标准库提供的new和delete操作符,是一个通用实现,未针对具体对象做具体分析 存在分配器速度慢.小型对象空间浪费严重等问题,不适用于对效率和内存有限制的应用场景   好处: 灵活的内 ...

  4. 重载new delete操作符是怎么调用的

    自定义的new操作符是怎么对英语new 一个对象的?自定义的delete操作符什么情况下得到调用?new一个对象时出现异常需要我操心内存泄露吗?下面的一个例子帮我们解开所有的疑惑. 1. 调用规则   ...

  5. C++之new和delete操作符

    在C语言中的动态分配和释放内存的函数是malloc calloc 和 free , 而在C++中要用 new new[] delete delete[] 来申请动态空间和释放空间. 注意:的是new. ...

  6. 1.5 C++ new和delete操作符

    参考:http://www.weixueyuan.net/view/6331.html 在C语言中,动态分配和释放内存的函数是malloc.calloc和free,而在C++语言中,new.new[] ...

  7. js delete 操作符

    delete操作符很陌生,很少会用到,但是既然碰到了,就mark一下: delete 操作符用于删除一个对象的属性: 注意点:只能删除自己的属性,从原型链上继承的属性是无法删除的:

  8. C++ new delete操作符

    //new delete操作符 #define _CRT_SECURE_NO_WARNINGS #include<iostream> using namespace std; /* 1.n ...

  9. js中的内部属性与delete操作符

    本文正式地址:http://www.xiabingbao.com/javascript/2015/08/03/javascript-delete-configurable 在讲解Configurabl ...

  10. C++语言基础(2)-new和delete操作符

    在C语言中,动态分配内存用 malloc() 函数,释放内存用 free() 函数.如下所示: ); //分配10个int型的内存空间 free(p); //释放内存 在C++中,这两个函数仍然可以使 ...

随机推荐

  1. C# 使用三层架构实例演示-winForm 窗体登录功能

    ---------------------------------------------------------------------------------------------------华 ...

  2. BZOJ.4650.[NOI2016]优秀的拆分(后缀数组 思路)

    BZOJ 洛谷 令\(st[i]\)表示以\(i\)为开头有多少个\(AA\)这样的子串,\(ed[i]\)表示以\(i\)结尾有多少个\(AA\)这样的子串.那么\(Ans=\sum_{i=1}^{ ...

  3. Lua脚本性能优化指南

    https://github.com/flily/lua-performance/blob/master/Guide.zh.md https://springrts.com/wiki/Lua_Perf ...

  4. 【DWM1000】 code 解密2一 工程初始化代码分析

    instance_init 函数追下去,绝大多数的代码都在初始化如下结构体 typedef struct { INST_MODE mode; instance_init -ANCHOR //insta ...

  5. 最长公共子序列-LCS问题 (LCS与LIS在特殊条件下的转换) [洛谷1439]

    题目描述 给出1-n的两个排列P1和P2,求它们的最长公共子序列. 输入 第一行是一个数n, 接下来两行,每行为n个数,为自然数1-n的一个排列. 输出 一个数,即最长公共子序列的长度 输入样例 5 ...

  6. 超级牛皮的oracle的分析函数over(Partition by...) 及开窗函数 (转)

    http://zonghl8006.blog.163.com/blog/static/4528311520083995931317/ over(Partition by...) 一个超级牛皮的ORAC ...

  7. centos安装谷歌浏览器

    第一步: 切换到root权限 su root 或者 sudo -i 第二步: 下载新的软件源: 进入到 cd /etc/yum.repos.d 然后 wget http://people.centos ...

  8. week 10 blog

    一.Iterations : 1.do...while : 创建执行指定语句的循环,直到测试条件评估为false.在执行语句后评估条件,导致指定语句至少执行一次. 例子:在以下示例中,do...而循环 ...

  9. tmunx error:invalid option: status-utf8 invalid option: utf8

    修改为:set-window-option -gq mouse off set-window-option -gq mode-mouse off set-option -gq status-utf8 ...

  10. springcloud灰度发布实现方案

    Nepxion Discovery是一款对Spring Cloud Discovery服务注册发现.Ribbon负载均衡.Feign和RestTemplate调用.Hystrix或者阿里巴巴Senti ...