当前位置: 代码网 > it编程>编程语言>C/C++ > C++ 中的new 和 delete 运算符及new和malloc的区别解析

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

2024年11月15日 C/C++ 我要评论
一、什么是new和delete我们知道在c语言中,动态开辟内存的方法是使用:malloc/calloc/realloc。释放动态开辟的内存是free。在c++中,又引出了一个新玩法:new 和 del

一、什么是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 运算符内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

  • QT使用QChart绘制饼图

    QT使用QChart绘制饼图

    饼图没有坐标轴,也不需要坐标轴使用的系列是qpieseries饼图里面一个一个的块称为切片举例:绘制一个饼图,点击对应切片可以让切片分离1、创建图表视图并开启抗... [阅读全文]
  • 使用Qt实现旋转动画效果

    使用Qt实现旋转动画效果

    使用qpropertyanimation类绑定对应的属性后就可以给这个属性设置对应的动画//比如自定义了属性q_property(int rotation re... [阅读全文]
  • Qt实现高准确率的语音识别

    Qt实现高准确率的语音识别

    1.选择语音识别引擎开源语音识别项目中,以下两款工具可以用于支持中英文识别,并且与qt兼容:vosk:vosk是一个开源的语音识别工具,支持中英文及多种语言,具... [阅读全文]
  • 关于Qt C++中connect的几种写法代码示例

    关于Qt C++中connect的几种写法代码示例

    前言这connect函数就像是编程世界里的“茴”字,千变万化,各有千秋。咱们程序员呢,就像是孔乙己那样,虽然有时候会觉得这些变化有些好笑... [阅读全文]
  • C语言字符函数与字符串函数的实现示例

    1. 字符函数在c语言标准库中提供了一系列用于处理字符的函数,这些函数定义在 <ctype.h>头文件中。字符函数分为两种:字符分类函数和字符转换函数1.1 字符分类函…

    2024年11月05日 编程语言
  • C语言内存函数的具体使用

    前言上期我们学习了,但是字符串函数仅仅只能对字符进行操作,那么这次我们来学习一下内存函数在c语言中内存函数是一组用于内存操作的标准库函数,它们定义在 <string.h>…

    2024年11月05日 编程语言

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com