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++获取主机网卡MAC地址的三方法

    C/C++获取主机网卡MAC地址的三方法

    MAC地址(Media Access Control address),又称为物理地址或硬件地址,是网络适配器(网卡)在制造时被分配的全球唯一的48位地址,通过获取MAC地址可以判断当前主机的唯一性可以与IP地址绑定并实现网络准入控制,本文给大家介绍了使用C/C++获取主机网卡MAC地址的三方法
    2023-11-11
  • 基于C++实现柏林噪声算法(Perlin Noise)

    基于C++实现柏林噪声算法(Perlin Noise)

    Perlin噪声(Perlin noise,又称为柏林噪声)指由Ken Perlin发明的自然噪声生成算法,具有在函数上的连续性,并可在多次调用时给出一致的数值。本文将用C++实现柏林噪声算法,感兴趣的可以了解一下
    2023-03-03
  • C语言malloc与calloc区别详解

    C语言malloc与calloc区别详解

    本文主要介绍了C语言malloc与calloc区别详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-01-01
  • C++实现基数排序的方法详解

    C++实现基数排序的方法详解

    本篇文章是对使用C++实现基数排序的方法进行了详细的分析介绍,需要的朋友参考下
    2013-05-05
  • C++ 匈牙利算法案例分析详解

    C++ 匈牙利算法案例分析详解

    这篇文章主要介绍了C++ 匈牙利算法案例分析详解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-08-08
  • 解析C++中的for循环以及基于范围的for语句使用

    解析C++中的for循环以及基于范围的for语句使用

    这篇文章主要介绍了解析C++中的for循环以及基于范围的for语句使用,是C++入门学习中的基础知识,需要的朋友可以参考下
    2016-01-01
  • 浅谈Qt信号与槽的各种连接方式

    浅谈Qt信号与槽的各种连接方式

    信号和槽是Qt特有的信息传输机制,本文主要介绍了浅谈Qt信号与槽的各种连接方式,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-09-09
  • C语言运用回调函数实现计算器

    C语言运用回调函数实现计算器

    这篇文章主要为大家详细介绍了C语言运用回调函数实现计算器,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-10-10
  • C++实现动态顺序表

    C++实现动态顺序表

    这篇文章主要为大家详细介绍了C++实现动态顺序表,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-05-05
  • C++中static和const的作用和用法

    C++中static和const的作用和用法

    在C++中,"static"和"const"都是用于修饰变量的关键字,它们具有不同的作用,本文通过代码示例给大家详细的介绍static和const的作用和用法,,需要的朋友可以参考下
    2023-06-06

最新评论