C++编程基础(1)-C中的malloc/free和C++中的new/delete
2017-11-13 11:56
411 查看
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指针,来宣告内存申请失败。
在代码中通常这么处理:
3.malloc的使用要点
mallow函数的原型为 void* malloc (size_t size)
用malloc动态申请一块长度为length的整数类型的内存的语法为
重点是类型转换(int*)和sizeof
下面就来说说这两者区别:
有了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
相关文章推荐
- C++ 内存分配方式,堆区,栈区,new/delete/malloc/free
- C++学习笔记(七)malloc、free、 new、delete与二维数组
- C++有了malloc和free,为什么还需要new/delete
- C++内存分配(1) - malloc vs new, delete vs free
- C/C++ 内存分配方式,堆区,栈区,new/delete/malloc/free
- C++中malloc/free与new/delete的区别及内存分配失败错误处理
- 在C++动态库中释放调用动态库程序中生成的指针new和delete 或 malloc和free
- C++ malloc/free和new/delete
- C++之new、delete 与malloc、free的异同
- C/C++ 内存分配方式,堆区,栈区,new/delete/malloc/free
- C/C++ 内存分配方式,堆区,栈区,new/delete/malloc/free
- C/C++ 内存分配方式,堆区,栈区,new/delete/malloc/free
- c++内存分配 -- new, delete, malloc, free
- C++入门学习:new,delete及其和malloc,free的区别
- C++中new与delete、malloc与free应用分析
- 面试题:C++有了malloc/free,为什么还需要new、delete?
- C与C++中内存分配释放-malloc,free,new,delete
- C/C++ 内存分配方式,堆区,栈区,new/delete/malloc/free
- c++有关类补充,又多扯了点delete free malloc new的东西
- C++之new、delete 与malloc、free的异同