您的位置:首页 > 编程语言 > C语言/C++

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指针,来宣告内存申请失败。

在代码中通常这么处理:

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  malloc C++ new