new delete malloc free的区别
2015-06-09 10:57
225 查看
1. malloc free 是C中使用的关键字,new delete 是C++中使用的关键字
2. new 和delete 分成两步
1> 分配内存空间,会根据类型自行计算
2> 调用构造函数,构造对象
malloc 只是完成了第一步,分配了内存空间。返回的是内存的起始地址,如果分配失败返回NULL。
delete : 1> 调用析构函数 2> 释放内存空间
3. 如果是分配的数组,delete[] 如果少了[],则只会删除第一个元素。
4.
int* p=new int[10];
delete[] ps;
question: 我们如何知道pa指向对象的数组的大小?怎么知道调用几次析构函数?
answer: 我们在new对象数组的时候,需要保存数组的维度,C++的做法是在分配数组空间时多分配4个字节,专门保存数组的大小。
但是new[]最终返回的是对象数组的指针,而不是所有分配空间的起始地址。
2. new 和delete 分成两步
1> 分配内存空间,会根据类型自行计算
2> 调用构造函数,构造对象
malloc 只是完成了第一步,分配了内存空间。返回的是内存的起始地址,如果分配失败返回NULL。
delete : 1> 调用析构函数 2> 释放内存空间
3. 如果是分配的数组,delete[] 如果少了[],则只会删除第一个元素。
4.
int* p=new int[10];
delete[] ps;
question: 我们如何知道pa指向对象的数组的大小?怎么知道调用几次析构函数?
answer: 我们在new对象数组的时候,需要保存数组的维度,C++的做法是在分配数组空间时多分配4个字节,专门保存数组的大小。
但是new[]最终返回的是对象数组的指针,而不是所有分配空间的起始地址。
相关文章推荐
- Security Interview Preparation
- 谷歌面试题:数组元素移动交叉
- c#调用Restful API
- hibernate的映射关系怎样判断用单向还是双向
- PostgreSQL服务器启动和关闭方法介绍
- UML交互图
- Mac电脑怎么显示隐藏文件
- web开发中常用Jar包含义
- 链表与二级指针的笔记
- GRE词汇分类之化学名词
- 不安装Oracle客户端使用PLSQL
- binarytree serialization
- TCP/IP协议和C/S模式--TCP/IP详解笔记(1)
- 怎样制作「用手机&电脑控制的Arduino-3D打印机器人」– IoBot?
- C++的开源跨平台日志库glog学习研究(二)--宏的使用
- [php] Thinkphp 联表查询
- strace命令 系统调用
- 数据结构和算法学习七,之快速排序
- 二进制搜索
- 在JavaScript中处理数组之reverse()方法的使用