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

 更新时间:2024年11月14日 14:42:21   作者: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 运算符内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • C++ 计数排序实例详解

    C++ 计数排序实例详解

    这篇文章主要介绍了C++ 计数排序实例详解的相关资料,需要的朋友可以参考下
    2017-07-07
  • C++详解如何实现单链表

    C++详解如何实现单链表

    线性表的链式存储又称为单链表,它是指通过一组任意的存储单元来存储线性表中的数据元素。本文将用C++实现单链表,需要的可以参考一下
    2022-06-06
  • C/C++实现高并发http服务器的代码示例

    C/C++实现高并发http服务器的代码示例

    这篇文章简单给大家介绍了C/C++实现高并发http服务器的代码示例,文章通过代码和图文介绍的非常详细,感兴趣的同学可以参考阅读
    2023-07-07
  • C++实现简单走迷宫的代码

    C++实现简单走迷宫的代码

    这篇文章主要为大家详细介绍了C++实现简单走迷宫的代码,利用回溯法求解,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-05-05
  • C++设计模式之外观模式(Facade)

    C++设计模式之外观模式(Facade)

    这篇文章主要为大家详细介绍了C++设计模式之外观模式(Facade),具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-03-03
  • Qt数据库应用之实现csv文件转xls

    Qt数据库应用之实现csv文件转xls

    这篇文章主要为大家详细介绍了如何利用Qt实现csv文件转xls功能,文中的示例代码讲解详细,对我们学习或工作有一定参考价值,需要的可以了解一下
    2022-06-06
  • 利用C语言实现简易版扫雷

    利用C语言实现简易版扫雷

    这篇文章主要为大家详细介绍了C语言实现简易版扫雷,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-02-02
  • 图文详解C语言位运算基础知识

    图文详解C语言位运算基础知识

    这篇文章主要以图文结合的方式为大家详细介绍了C语言位运算基础知识,感兴趣的小伙伴们可以参考一下
    2016-07-07
  • C++使用回溯法解决黄金矿工问题

    C++使用回溯法解决黄金矿工问题

    在矩阵中考察回溯算法,分为任意起点、左上角开始等情况。从而有不同的模板,其实区别就是直接开始还是每个坐标都去尝试,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧
    2022-10-10
  • VC6.0打开文件以及向工程中添加文件时程序崩溃自动退出解决方法

    VC6.0打开文件以及向工程中添加文件时程序崩溃自动退出解决方法

    vc6.0程序中,点击打开文件以及向工程中添加文件时,程序竟然崩溃自动退出了,不知什么原因,安装相同的vc程序,本本竟然出现此缘故
    2013-01-01

最新评论