new和delete

news2024/11/19 5:35:26

目录

malloc:

开辟失败:返回值为空指针

new:

内置类型:

申请一个int对象(开辟一块存储int类型数据的空间,只能存储一个int数据):

申请5个int对象(开辟一块存储int类型数据的空间,能存储指定个int数据):

申请一个int对象,且能指定初始化:

C++11特供版:支持new[ ]用{ }初始化,C++98不支持

自定义类型:

先堆上申请空间,再调用构造函数初始化:

开辟失败:抛异常

 delete:

内置类型:

用new申请一个对象的指针销毁:

用new申请多个对象的指针销毁:

自定义类型:

先调用析构函数清理对象中的资源,再释放空间


malloc:

int* p0=(int*)malloc(sizeof(int)*n)

开辟失败:返回值为空指针

char* ptr = (char*)malloc(1024u * 1024u * 1024u * 2 - 1);
printf("%p\n", ptr);

运行结果:

应对方式:if判断

if(ptr==NULL)
{
    perror(“malloc fail”);
    return;
}


new:

内置类型:

申请一个int对象(开辟一块存储int类型数据的空间,只能存储一个int数据):

int* p1=new int;

申请5个int对象(开辟一块存储int类型数据的空间,能存储指定个int数据):

//开辟能存储5个int的空间
int* p2=new int[5];

申请一个int对象,且能指定初始化:

//将开辟的一个存储int类型的新空间初始化为5
int* p3=new int(5);

C++11特供版:支持new[ ]用{ }初始化,C++98不支持

int* p4=new int[5]{1,2,3,4,5}

自定义类型:

先堆上申请空间,再调用构造函数初始化:

#include<iostream>
using namespace std;
class A
{
public:
	A(int a=0)
	:_a(a)
	{}

private:
	int _a;
};

int main()
{
    //无参
	A* p1 = new A;
    //含参
    A* p2 = new A(10);
}

开辟失败:抛异常

char* ptr2 = new char[1024u * 1024u * 1024u * 2 - 1];
printf("%p\n", ptr2);

 

应对方式:try ... catch

try
{
	char* ptr2 = new char[1024u * 1024u * 1024u * 2 - 1];
	printf("%p\n", ptr2);
}
catch (const exception& e)
{
	cout << e.what() << endl;
}


delete:

内置类型:

用new申请一个对象的指针销毁:

delete p1;
delete p3;

用new申请多个对象的指针销毁:

delete[] p2;
delete[] p4;

自定义类型:

先调用析构函数清理对象中的资源,再释放空间

#include<iostream>
using namespace std;
class A
{
public:
	A(int a=0)
	:_a(a)
	{}
	~A()
	{}
private:
	int _a;
};

int main()
{
	A* p1 = new A;
	A* p2 = new A(10);
	delete p2;
}

 结论:

1.内置类型new/delete和malloc/free没有本质的区别,只有用法的区别,new/delete更简便了;

2.new/delete是为自定义类型准备的,不仅在堆上申请出来,还调用构造函数和析构函数初始化和清理

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/462961.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Blender3.5 边的操作

目录 1. 边操作1.1 边的细分 Subdivide1.2 边的滑移 Edge Slide1.3 边的删除1.4 边的溶解 Dissolve1.5 边线倒角 Bevel1.6 循环边 Loop Edges1.7 并排边 Ring Edges1.8 桥接循环边 1. 边操作 1.1 边的细分 Subdivide 在边选择模式&#xff0c;选中一条边&#xff0c;右键&…

JVM系列(十一) 垃圾收集器之 Concurrent Mark Sweep 并发标记清除

垃圾收集器之 Concurrent Mark Sweep 并发标记清除 上几篇文章我们讲解了单线程垃圾收集器 Serial/SerialOld ,多线程垃圾收集器 Parallel Scavenge/Old, 本文我们讲解下 Concurrent Mark Sweep 简称CMS垃圾收集器 垃圾收集器 新生代收集器&#xff1a; Serial、ParNew、Par…

图解 | 原来这就是网络

​​ 你是一台电脑&#xff0c;你的名字叫 A 很久很久之前&#xff0c;你不与任何其他电脑相连接&#xff0c;孤苦伶仃。 ​ 直到有一天&#xff0c;你希望与另一台电脑 B 建立通信&#xff0c;于是你们各开了一个网口&#xff0c;用一根网线连接了起来。 ​ 用一根网线连接起来…

[晕事]今天做了件晕事7

今天在使用iptables与grep的时候碰到一件晕事&#xff1b; 第一步添加了一条rule到OUTPUT&#xff1a; iptables -A OUTPUT --source 10.87.51.2 --destination 10.87.51.10 -p tcp --sport 5060 -j DROP 第二步使用&#xff1a;iptables -nL | grep DROP 发现这条记录跑到了FO…

玩转ESP32 PWM输出,制作炫酷呼吸灯效果

文章目录 什么是PWM软硬件使用ESP32实现PWM输出代码讲解结语 什么是PWM PWM&#xff08;Pulse Width Modulation&#xff09;是一种常用的模拟信号产生技术&#xff0c;它通过对一个定时器的计数值进行调整来改变输出信号的占空比&#xff0c;从而控制输出信号的平均电压值&am…

idea使用 ( 二 ) 创建java项目并导入依赖jar

3.创建java项目 3.1.创建普通java项目 3.1.1.打开创建向导 接 2.3.1.创建新的项目 也可以 从菜单选择建立项目 会打开下面的选择界面 3.1.2.不使用模板 3.1.3.设置项目名 Project name : 项目名 Project location : 项目存放的位置 确认创建 3.1.4.关闭tips 将 Dont s…

Spring Boot集成ShardingSphere实现数据分片(一) | Spring Cloud 40

一、背景 传统的将数据集中存储至单一节点的解决方案&#xff0c;在性能、可用性和运维成本这三方面已经难于满足海量数据的场景。 从性能方面来说&#xff0c;由于关系型数据库大多采用 B 树类型的索引&#xff0c;在数据量超过阈值的情况下&#xff0c;索引深度的增加也将使…

Mail 邮件服务

~ Postfix ~ sdskill.com 的邮件发送服务器 ~~ 支持smtps(465)协议连接,使用Rserver颁发的证书,证书路径/CA/cacert.pem ~ 创建邮箱账户“user1~user99”(共99个用户),密码为Chinaskill20!; ~ Dovecot ~ sdskill.com 的邮件接收服务器; ~ 支持imap…

6.微服务项目实战---Sleuth--链路追踪

6.1 链路追踪介绍 在大型系统的微服务化构建中&#xff0c;一个系统被拆分成了许多模块。这些模块负责不同的功能&#xff0c;组合成 系统&#xff0c;最终可以提供丰富的功能。在这种架构中&#xff0c;一次请求往往需要涉及到多个服务。互联网应用构建在不同的软件模块集上…

Docker compose-实现多服务、nginx负载均衡、--scale参数解决端口冲突问题

Docker compose-实现多服务、nginx负载均衡、--scale参数解决端口冲突问题 问题&#xff1a;scale参数端口冲突解决方法&#xff1a;nginx实现多服务、负载均衡修改docker-compose.yml配置新增nginx本地配置文件验证启动容器查看容器状态访问web应用 问题&#xff1a;scale参数…

《二》HTTP 请求报文和响应报文、请求方法、状态码

请求报文和响应报文&#xff1a; 请求报文: 客户端向服务器发送的请求信息&#xff0c;就叫做请求报文。 客户端发送一个 HTTP 请求到服务器&#xff0c;请求信息包含四部分&#xff1a;请求行、请求头、空行、请求体。 请求行&#xff1a;包含三部分&#xff0c;分别是请…

查看库文件是32位还是64位|查看lib是静态库还是导入库|判断是debug模式还是release模式

文章目录 dll位数查看lib位数查看查看lib库是静态库还是导入库dll库文件信息查看lib库文件内容查看dll库查看编译模式是debug还是release方法一方法二方法三 lib静态库查看编译模式是debug还是release方法一方法二 lib导入库查看编译模式是debug还是release查看Linux下的.a库&a…

ROS学习第十五节——常用API(C++)

由于时间问题&#xff0c;从这一节开始只记录C实现效果&#xff0c;加油 以下附上这一节调试用的程序 https://download.csdn.net/download/qq_45685327/87708069 1.初始化函数 void init(int &argc, char **argv, const std::string& name, uint32_t options 0); …

openEuler NFS+协议全新发布:实现NAS存储性能与可靠性倍增

4月21日&#xff0c;在openEuler Developer Day 2023上&#xff0c;openEuler发布NFS协议&#xff0c;实现单客户端访问NAS存储可靠性提升3倍、性能提升6倍&#xff0c;助力NAS存储全面满足新型生产核心场景下苛刻要求。 传统NFS面临挑战 网络文件系统&#xff08;NFS&#xf…

vue打包如何开启gzip压缩

文章目录 场景gzip压缩有两种方案&#xff1a;个人实践 场景 本人前端打包的js达到了6.9M,导致网站加载很慢&#xff0c;想了下可以用gzip的方式压缩&#xff0c;减少文件大小。 “前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c…

什么蓝牙耳机好?测评达人精选五款性价比高蓝牙耳机推荐

用蓝牙耳机听歌、刷视频、玩游戏已经成为趋势&#xff0c;有线耳机已经逐渐被取代&#xff0c;但蓝牙耳机价格跨度大&#xff0c;品牌和型号也非常多&#xff0c;究竟什么蓝牙耳机好&#xff1f;我作为测评员这几年已经体验过五十款蓝牙耳机&#xff0c;今天就来总结五款性价比…

模仿网易云音乐黑胶唱片的交互实现

今天在 .NET MAUI 中我们来实现这个交互效果&#xff0c;先来看看效果&#xff1a; 使用.NET MAU实现跨平台支持&#xff0c;本项目可运行于Android、iOS平台。 创建页面布局 项目模拟了网易云音乐的播放主界面&#xff0c;可播放本地音乐文件。使用MatoMusic.Core作为播放内…

ChatGLM ptuning predict(预测)为空值的解决方案

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…

html学习(布局方式(layout)、浮动(float)、定位(position)、弹性盒(flex))

布局方式(layout) 文档流 文档流&#xff08;normal flow&#xff09; 文档流通俗的讲&#xff0c;就是一个web页面中&#xff0c;每一个模块只能从上到下从左往右的方式排列在页面上。 将窗口自下而上分成一行一行&#xff0c;应在每行中按从左至右的依次排放元素&#xff0…

[ZJCTF 2019]EasyHeap-patchlibc-调试

1,三连 主要功能&#xff1a; 1、malloc申请chunk 2、修改chunk内容 3、free chunk 4、exit 堆题多看一个libc信息&#xff1a; 2,IDA分析 2.1、malloc申请chunk heaparray[i]&#xff1a;存放 chunk 的地址。read_input(heaparray[i], size)&#xff1a;向 chunk 写入 s…