C++编程基础(1)-C中的malloc/free和C++中的new/delete
来源:互联网 发布:哭声 知乎 编辑:程序博客网 时间:2024/05/18 02:44
1.在C的代码中,经常用到malloc在堆上开辟内存,然后用free释放内存(后面会说释放后,最好加上NULL)。而在C++中的开辟内存和释放内存用的是new/delete.
下面就来说说这两者区别:
有了malloc/free为什么还要有new/delete
要知道,malloc/free是C/C++语言标准库中的标准库函数,而new/delete是C++语言中的运算符。
有这样一句话:虽然两者都能起到申请内存和释放内存的作用,但是对于非内部数据类型的对象而言,光是用malloc和free是无法满足要求的。理解:因为C++是面向对象编程,于是会产生很多自己编写的类,产生对象,这些类不是C、C++内部的数据类型,是自己定义的数据类型,这些类在产生对象的时候,会自动执行构造函数,在对象消亡的时候,会自动执行析构函数,而malloc/free是库函数,不是运算符,不在编译器的自动运行权限之内,所以malloc/free不能强行去执行构造函数和析构函数。所以C++定义了一个能完成动态内存分配和初始化构造函数工作的运算符new,还有一个用于释放内存的运算符delete。
- 为什么不直接全用new/delete算了
从上面可以看出,new/delete的功能似乎要强大一点,但是C语言是无法使用运算符new/delete的,在编译C语言语法的时候,就还是需要使用malloc/free.
2.堆上动态分配内存会有内存耗尽的情况
当在动态申请内存找不到足够大的内存空间的时候,malloc和new会返回一个NULL指针,来宣告内存申请失败。
在代码中通常这么处理:
void Func(){ A *a=new A(); if(a==NULL) { exit(1);//终止代码 }}
3.malloc的使用要点
mallow函数的原型为 void* malloc (size_t size)
用malloc动态申请一块长度为length的整数类型的内存的语法为
int* p=(int*)malloc(sizeof(int) * length)
重点是类型转换(int*)和sizeof
阅读全文
0 0
- C++编程基础(1)-C中的malloc/free和C++中的new/delete
- C++malloc/free和new/delete
- C中的malloc()函数和free()函数与C++中的new()函数和delete()函数详解
- C++中的new和delete,C中的free、malloc、calloc、realloc、_alloca
- C++中new/delete和C语言中的malloc free对比
- C中的malloc和free
- c中的malloc和free
- C中的malloc和free
- [C/C++] malloc/free和new/delete的区别
- 浅谈C中的malloc和free(1)
- C中的malloc和free(转)
- C语言中的malloc/free与C++中的new/delete的区别
- C/C++中new/delete malloc/free
- 10.c++-new/delete和malloc/free读书笔记
- C/C++ 中 new/delete 和 malloc/free 区别
- c/c++中malloc/free和new/delete的区别
- C++中的malloc/free和new/delete
- C 中的malloc/free 与C++中new/delete的区别
- 无线信号(RSSI)
- jgroup学习01
- PostgreSQL数据目录下有哪些目录
- 记录一些意外:ORA-01653
- ubuntu下如何查找某个文件的路径
- C++编程基础(1)-C中的malloc/free和C++中的new/delete
- Kollin 语言的使用——如何创建Kotlin项目
- jmx学习示例
- C. K-Dominant Character
- 学习C++笔记(一)
- Warning: date(): It is not safe to rely on the system's timezone settings. You are *required* to use
- Junit理解
- 关键路径的概念和算法
- 扫地机器人的构造及核心技术详解