C 语言

关注公众号 jb51net

关闭
首页 > 软件编程 > C 语言 > c++ new 和 delete 运算符

C++ 中的new 和 delete 运算符及new和malloc的区别解析

作者:wqyc++

在C++中,又引出了一个新玩法:new 和 delete,在C++中,new是用来动态开辟内存的,delete是用来释放我们所动态开辟的内存C++中的new和delete运算符及new和malloc的区别解析,感兴趣的朋友跟随小编一起看看吧

一、什么是new和delete

我们知道在C语言中,动态开辟内存的方法是使用:malloc/calloc/realloc。释放动态开辟的内存是free。在C++中,又引出了一个新玩法:new 和 delete。在C++中,new是用来动态开辟内存的,delete是用来释放我们所动态开辟的内存。

在C语言中,对内置类型的动态开辟我们经常使用的函数是malloc函数。在C++中,我们也可以使用new操作符来动态申请空间。注意:我们这里发现了malloc 和 new 的第一个区别,malloc是函数,new是一个操作符。当然,成对出现的free 是函数,delete 是操作符。我们先看其实用方法的对比,代码如下:

void Test()
{
    // 动态申请一个int类型的空间
    int* p1 = malloc(sizeof(int));
    int* p2 = new int;
    // 动态申请一个int类型的空间并初始化为10
    int* p3 = malloc(sizeof(int));
    *p3 = 10;
    int* p4 = new int(10);
    // 动态申请10个int类型的空间
    int* p5 = malloc(sizeof(int) * 3);
    int* p6 = new int[3];
    //释放
    free(p1);
    delete p2;
    free(p3);
    delete p4;
    free(p5);
    delete[] p6;
}

通过上面的使用对比,我们可以很明显的感觉到new和delete使用起来更加方便。因为我们在使用new动态开辟空间时,并不需要计算所开辟空间类型的大小。因为后面跟着类型,new会自动计算出类型的大小。

我们还发现,new在动态开辟内存时,还可以对其进行初始化。而malloc开辟后,才可通过解引用对其进行初始化。new在动态开辟数组时,也可对其进行初始化,但是这只是C++11才开始支持的语法,用法如下:

    int* p6 = new int[10]{1,2,3};
    delete[] p6;
    //后面没有给出的值,会自动初始化为0。

二、new和malloc的区别

new 和 malloc 的区别 :

1.malloc 是c语言库函数,new是运算符。
2.malloc 返回值必须强制类型转换,new的返回值不需要。
3.malloc 必须传入具体字节个数,new传入变量个数或者变量本身。 
4.malloc 申请失败会返回空,new会抛出异常。
5.使用new创建一个类的对象时会先调用malloc分配空间,然后再调用构造函数给成员变量赋值。   

6.在给自定义类申请空间时new和delete会自动调用构造函数和析构函数。

到此这篇关于C++ 中的new 和 delete 运算符及new和malloc的区别解析的文章就介绍到这了,更多相关c++ new 和 delete 运算符内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文