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 分配的内存空间, 但会调用析构函数, 可能会造成其他
问题。
new和delete操作符的更多相关文章
- Javascript的变量与delete操作符
原文:http://charlee.li/javascript-variables-and-delete-operator.html 刚刚看到一篇好文(原文链接), 对Javascript中的dele ...
- javascript之delete操作符
理解delete 理论 代码段的类型 执行上下文 活动对象 / 变量对象 属性的特性 内置属性与 DontDelete 未声明的赋值 Firebug的困惑 在eval中删除变量 浏览器兼容性 Geck ...
- C++ 重载new和delete操作符
原因: C++标准库提供的new和delete操作符,是一个通用实现,未针对具体对象做具体分析 存在分配器速度慢.小型对象空间浪费严重等问题,不适用于对效率和内存有限制的应用场景 好处: 灵活的内 ...
- 重载new delete操作符是怎么调用的
自定义的new操作符是怎么对英语new 一个对象的?自定义的delete操作符什么情况下得到调用?new一个对象时出现异常需要我操心内存泄露吗?下面的一个例子帮我们解开所有的疑惑. 1. 调用规则 ...
- C++之new和delete操作符
在C语言中的动态分配和释放内存的函数是malloc calloc 和 free , 而在C++中要用 new new[] delete delete[] 来申请动态空间和释放空间. 注意:的是new. ...
- 1.5 C++ new和delete操作符
参考:http://www.weixueyuan.net/view/6331.html 在C语言中,动态分配和释放内存的函数是malloc.calloc和free,而在C++语言中,new.new[] ...
- js delete 操作符
delete操作符很陌生,很少会用到,但是既然碰到了,就mark一下: delete 操作符用于删除一个对象的属性: 注意点:只能删除自己的属性,从原型链上继承的属性是无法删除的:
- C++ new delete操作符
//new delete操作符 #define _CRT_SECURE_NO_WARNINGS #include<iostream> using namespace std; /* 1.n ...
- js中的内部属性与delete操作符
本文正式地址:http://www.xiabingbao.com/javascript/2015/08/03/javascript-delete-configurable 在讲解Configurabl ...
- C++语言基础(2)-new和delete操作符
在C语言中,动态分配内存用 malloc() 函数,释放内存用 free() 函数.如下所示: ); //分配10个int型的内存空间 free(p); //释放内存 在C++中,这两个函数仍然可以使 ...
随机推荐
- Navicat操作数据库时一直显示加载中
用Navicat for mysql操作mysql数据库,其中一个表怎么也打不开,一直加载,还不能关闭.从网上搜索原因,主要是以下几个原因:原因一:表死锁,会出现这样的情况,锁不释放,无论多久都读取不 ...
- 潭州课堂25班:Ph201805201 django 项目 第二十二课 文章主页 新闻列表页面滚动加载,轮播图后台实现 (课堂笔记)
新建static/js/news/index.js文件 ,主要用于向后台发送请求, // 新建static/js/news/index.js文件 $(function () { // 新闻列表功能 l ...
- Vue发送请求
可以试试玩ajax请求,个人觉得axios用Promise包装了下,代码美观 axios请求使用方法 https://github.com/axios/axios#using-applica ...
- POJ 水题(刷题)进阶
转载请注明出处:優YoU http://blog.csdn.net/lyy289065406/article/details/6642573 部分解题报告添加新内容,除了原有的"大致题意&q ...
- BZOJ2491 : Quelling Blade
首先将合成树展开,得到一棵不超过$m(m\leq 10^6)$的有根树. 问题等价于,不休息地访问所有点,访问每个点需要时间$t_i$,价值为$v_i$. 设$vis_i$为访问$i$点的时间(不含$ ...
- BZOJ4081 : [Wf2014]Skiing
首先将目标点按$y$坐标从小到大排序. 如果加速度为$0$,那么只要贪心走一遍即可. 否则考虑DP,设$f[i][j]$表示从$i$点以速度$j$出发最多能经过多少个点. 注意到将DP值相同的合并可以 ...
- BZOJ2130 : 魔塔
考虑从$0$到$n$枚举$A$的通关楼层. 设$f[i]$表示$B$通关$i$层时$C$最多能得到多少金币,因为金币数非负,所以也可以看作最多通关多少层. 当$A$的通关楼层往上多$1$的时候,这把钥 ...
- 编程菜鸟的日记-初学尝试编程-C++ Primer Plus 第4章编程练习5
#include <iostream>using namespace std;struct CandyBar{ char kind[20]; float weight; int calor ...
- mysql error
一.could not find driver 我们这里以 PDO 为例, 问题: PDO 连接数据库找不到驱动程序. 解决方法:在 php.ini 里面讲 php_pdo_mysql 和 php_ ...
- Spring MVC4 + Spring Security4 + Hibernate实例
http://www.yiibai.com/spring-security/spring-mvc-4-and-spring-security-4-integration-example.html 在这 ...