C++核心编程和桌面应用开发 第五天(new delete malloc 静态成员 静态成员函数 单例)

目录

1.new运算符

1.1开批数组

2.delete运算符

3.malloc和new的区别

4.万能指针接收new对象

5.静态成员

6.静态成员函数

7. 单例

7.1概念

7.2常见场景


1.new运算符

C++中用new进行动态内存分配,new会在调用构造函数之前,成功进行内存分配,它带有内置的长度计算、类型转换、安全检查

1.1开批数组

int* pint=new int[10];    //pint为数组首地址delete[] pint;

注意:若delete后未加入[ ],可能释放失败,new创建数组时,会记录元素个数,delete会查找这个个数,但不加 [ ],就可能只释放一次,编译器不同结果不同

2.delete运算符

释放new出来的内存,先调用析构,然后释放内存。建议delete之后,再将指针置空。

3.malloc和new的区别

  • ①malloc是C的库函数,new是C++创建堆区的运算符
  • ②malloc对应free,new对应delete
  • ③malloc返回值是void*,new返回创建对象的指针类型
  • ④malloc不调用构造,free不调用析构,new调用构造,delete调用析构
  • ⑤malloc会显式指出内存大小,new编译器会根据类型自行计算

4.万能指针接收new对象

该对象无法释放,因为是void类型的

5.静态成员

  • 只有一份,它不属于某个对象,而属于某个类,被所有对象共享;
  • 在编译阶段就分配空间,对象还未创建时,就已经分配好空间了;
  • 类内声明,类外初始化;
  • 可通过对象/类名进行访问;
  • 静态成员也有访问权限。
class Person
{
public:static int m_A;
};//通过类访问
int Person::m_A = 100;//通过对象访问
Person p;
p.m_A = 200;

6.静态成员函数

  • 只有一份,被所有对象共享;
  • 只能访问静态成员变量,不能访问非静态成员变量;
  • 可通过对象/类名进行访问;
  • 静态成员函数也有访问权限。

7. 单例

7.1概念

  • 只包含一个单例类;
  • 一个类只有一个对象,且此对象可共享。

7.2常见场景

class ChairMan
{
public://单例static ChairMan* getInstance(){return man;}private://默认构造私有化ChairMan() {};//拷贝构造私有化ChairMan(const ChairMan& man) {};static ChairMan* man;
};ChairMan* ChairMan::man=new ChairMan;void test()
{ChairMan* c1 = ChairMan::getInstance();
}

实现步骤:

  • 1.默认构造/拷贝构造函数私有化;
  • 2.类内,声明私有的静态成员指针,类外,将指针初始化指向new出的对象;
  • 3.将单例获取对象的接口写在public中。

注意:
因为单例模式被共享,释放对象的时机不确定,通常无需管理释放,程序结束系统会自动释放

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

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

相关文章

利用F.interpolate()函数进行插值操作

函数简介 功能: 利用插值方法,对输入的张量数组进行上\下采样操作,换句话说就是科学合理地改变数组的尺寸大小,尽量保持数据完整。 torch.nn.functional.interpolate(input, sizeNone, scale_factorNone, modenearest, align_c…

RabbitMQ是什么?RabbitMQ简介

一:技术背景 假如我们有一个支付服务,支付服务的业务逻辑是:首先支付扣减余额,更新支付单状态,更新订单状态,发短信,给这个用户增加积分。在这个场景下,如果我们使用同步调用通信&am…

vscode将c++项目打包exe进行反汇编练习

vscode将c&c项目打包成控制台exe全过程,进行c反汇编练习,反汇编只有不断的练习才能巩固、积累经验。 一、打包exe 创建新项目,选择c,Windows桌面向导 直接点击创建 直接点确定 直接点击运行即可,可以看到我的exe…

15 跨组件通信依赖注入provide和inject

Provide / Inject 通常,当我们需要从父组件向子组件传递数据时,我们使用 props。想象一下这样的结构:有一些深度嵌套的组件,而深层的子组件只需要父组件的部分内容。在这种情况下,如果仍然将 prop 沿着组件链逐级传递…

ROS2 技术及分布式介绍

PC端开发环境搭建 WSL环境搭建 https://www.guyuehome.com/46574 In Windows 11 builds that support wslg: 1. Open up powershell and enter wsl --install ROS2系统安装 方法一 • 设置编码 Bash $ sudo apt update && sudo apt install loca…

EffcientNetV2(2021):更快、更强、效率更高的EffcientNet!

EffcientNetV2: Smaller Models and Faster Training EfficientNetV2:更小的模型和更快的训练 论文地址: https://arxiv.org/abs/2104.00298 本文介绍了 EfficientNetV2,这是一个新的卷积网络系列,与以前的模型相比,它…

HDFS_API文件和文件夹

代码: Beforepublic void init() throws URISyntaxException, IOException {URI uri new URI("hdfs://master:9000");// 创建一个配置文件Configuration entries new Configuration();// 获取到了客户端对象 // entries.set("dfs.replicat…

【嵌入式linux开发】SPI设备文件读取ICM-40609D传感器

【嵌入式linux开发】SPI设备文件操作ICM-40609D传感器 前言一、数据手册浅读二、linux系统下使用SPI设备文件操作ICM-40609-D三、ros1发布imu数据3.1、创建ros1工作空间3.2、数据发布节点代码 前言 在本篇博客中,将从ICM-40609-D传感器的数据手册出发,简…

公安局软件管理平台建设方案和必要性,论文-3-———未来之窗行业应用跨平台架构

三、平台功能设计 四、技术架构 1. 前端界面 - 采用简洁、易用的设计风格,适应不同终端设备的访问。 - 基于 HTML5、CSS3 和 JavaScript 构建。 2. 后端服务 - 选择主流的 Web 开发框架,如 未来之窗跨平台架构,VUE。 - 数据库…

Github Webhook触发Jenkins自动构建

1.功能说明 Github Webhook可以触发Jenkins自动构建,通过配置Github Webhook,每次代码变更之后(例如push操作),Webhook会自动通知Jenkins服务器,Jenkins会自动执行预定义的构建任务(如Jenkins …

Redis-认识与应用(从ChatGpt的角度看Redis)

问题:您好,我的项目是在线教育平台,用springboot3搭建,我现在想学redis,请问redis能在我的项目中有什么应用场景呢 问题:就是我项目能应用上具体什么场景,请给我例子,并给我具体代码…

springboot整合openfeign

文章目录 准备一、引入必要依赖二、写一个feign client并暴露到注册中心2.1 client2.2 开启Feign客户端功能 三、别的服务引入IProductClient并调用方法3.1 建一个order-service,引入IProductClient所在模块3.2 注入IProductClient,并调用方法 四、启动服…

JAVA基本简介(期末)

1、JDK JRE JVM (1)JDK JAVA标准开发包,提供了编译、运行JAVA程序所需的各种工具和资源,包括JAVA编译器、JAVA运行时的环境,及常用的JAVA类库等 (2)JRE JAVA运行环境,用于解释执行JA…

JW01二氧化碳传感器(串行通信 STM32)

目录 一、介绍 二、传感器原理 1.工作原理介绍 2.串口数据流格式 三、程序设计 main.c文件 usart3.h文件 usart3.c文件 四、实验效果 五、资料获取 项目分享 一、介绍 JW01-CO2检测模块是一种用于检测空气中二氧化碳浓度的传感器模块。它可以广泛应用于室内空气质量…

美畅物联丨GB/T 28181系列之TCP/UDP被动模式和TCP主动模式

GB/T 28181《安全防范视频监控联网系统信息传输、交换、控制技术要求》作为我国安防领域的重要标准,为视频监控系统的建设提供了全面的技术指导和规范。该标准详细规定了视频监控系统的信息传输、交换和控制技术要求,在视频流传输方面,GB/T 2…

【Day20240924】05git 两人协作 冲突

git 两人协作 冲突 命令行解决 两个人修改同一文件时 的冲突可视化解决 两个人修改同一文件时 的冲突参考 命令行解决 两个人修改同一文件时 的冲突 假设kerwin.js是项目的路由文件。tiechui文件夹是组员铁锤的工作目录;test2008文件夹是组长的工作目录。此时&…

Redis 优化

目录 优雅的 key 删除 Bigkey 恰当的数据类型 批处理优化 Pipeline 集群下的批处理 服务端优化 持久化配置 慢查询 命令以及安全配置 内存安全和配置 内存缓冲区配置 集群最佳实践 集群带宽问题 集群还是主从 优雅的 key 删除 Bigkey Bigkey 内存占用较多&…

ubuntu 安裝 Poetry 示例

ubuntu 安裝 Poetry 示例 一、前言 poetry 是一个命令行工具,安装之后就可以使用 poetry 指令。可以将其安装全局环境或者是虚拟环境,我推荐安装在全局环境,这样在后面使用时不需要单独激活虚拟环境。 (1)安装 Poet…

【Linux】组管理权限管理任务调度【更详细,带实操】

Linux全套讲解系列,参考视频-B站韩顺平,本文的讲解更为详细 一、组管理 1、linux组的介绍 linux对文件的管理机制 linux中的文件有三个概念: 1、文件所有者是谁,谁创建了文件,当然文件所有者也可以修改2、文件属于…

基于内容的推荐算法

算法原理概述 首先推荐算法的作用是给用户推荐其可能喜欢的物品。此算法所依赖的数据大概分为两部分:(1)用户过去喜欢的物品;(2)每个物品的标签。 算法步骤 (1)根据用户过去喜欢的…