c++中构造对象实例的两种方式及其返回值

c++中,构造对象实例有两种方式,一种返回对象实例,一种返回该对象实例的指针。如下所示:

一、两种返回值

RedisConn conn1; //得到实例conn1;RedisConn *conn2 = new RedisConn();//得到指针conn2;RedisConn conn3 = new RedisConn();//错误,类型不匹配

意思是说,RedisConn conn;就是构造了一个实例,而通过new方式的话,就是返回指针。太奇怪了,跟c#、java完全不一样啊。在c#或java中,RedisConn conn意味着conn没有赋值,new RedisConn()返回一个诚实可靠的实例。

二、后续两种不同的处理方式

1、构造于栈

RedisConn conn;

这种方式下,conn 是在栈(stack)上分配的。栈是由编译器自动管理的内存区域,用于存储局部变量。conn 的生命周期与它的作用域相关联。当程序执行离开定义 conn 的代码块时(比如函数结束),conn 会被自动销毁,其析构函数会自动调用。

这种方式的话,如果想访问它的成员函数和成员变量,通过"."号,比如conn.rec_cnt;

void function() {RedisConn conn; // 在栈上创建一个 RedisConn 实例conn.someMethod(); // 直接调用方法
} // 当函数结束时,conn 自动被销毁

优点:
自动管理内存,无需手动释放。
简单易用,适合于局部使用的小型对象。

缺点:
栈上的空间有限,不适合创建大型对象或需要长时间存在的对象。
对象的生命周期受限于其作用域。

2、构造于堆

RedisConn* conn = new RedisConn();

内存分配:new RedisConn() 在堆(heap)上为 RedisConn 对象分配内存,并返回指向该对象的指针。
生命周期:堆上的对象不会随着作用域的结束而自动销毁。你需要显式地调用 delete 来释放这块内存,否则会导致内存泄漏。
访问方式:通过 -> 操作符来访问指针所指向的对象的成员函数和成员变量。

void function() {RedisConn* conn = new RedisConn(); // 在堆上创建一个 RedisConn 实例conn->someMethod(); // 使用 -> 操作符调用方法// 记得释放内存delete conn;conn = nullptr; // 设置为 nullptr 避免悬挂指针
}

优点:
可以动态控制对象的生命周期,适合于需要长时间存在或大小不确定的对象。
堆上的空间相对较大,适合创建大型对象。

缺点:
需要手动管理内存,增加了出错的可能性(如忘记释放内存导致内存泄漏)。
分配和释放堆上的内存通常比栈上的操作更慢。

三、堆和栈

1、栈(Stack)

后进先出。

2、堆(Heap)

特殊的完全二叉树结构,存进去,自然而然得到一个位置,比如它的子节点都比它小,形成一个小山包(小土堆);或者反过来,它所有儿子都比它大。所以堆查找最大值最为快速。有最大堆,最小堆。没有好大堆。

二叉树的概念我已经忘得一干二净,依稀记得有一种二叉树是:

左边的子节点都比它小,右边的子节点都比它大

这种跟堆没有啥关系,这叫二叉搜索树,排过序的,便于搜索。

与堆相对应,可能是坨,完全没有顺序可言。

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

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

相关文章

【Unity笔记】PathCreator使用教程:用PathCreator实现自定义轨迹动画与路径控制

在Unity开发过程中,角色移动、摄像机动画、轨道系统、AI巡逻等功能中,路径控制是常见又复杂的需求之一。如何优雅、高效地创建路径并控制对象沿路径运动,是游戏开发、动画制作乃至工业仿真中的关键问题。 在这篇文章中,我将介绍一…

JAVA实战开源项目:健身房管理系统 (Vue+SpringBoot) 附源码

本文项目编号 T 180 ,文末自助获取源码 \color{red}{T180,文末自助获取源码} T180,文末自助获取源码 目录 一、系统介绍二、数据库设计三、配套教程3.1 启动教程3.2 讲解视频3.3 二次开发教程 四、功能截图五、文案资料5.1 选题背景5.2 国内…

[人机交互]交互设计过程

*一.设计 1.1什么是设计 设计是一项创新活动,旨在为用户提供可用的产品 –交互设计是“设计交互式产品、以支持人们的生活和工作” 1.2设计包含的四个活动 – 识别用户的需要( needs )并建立需求( requirements &…

1. 视频基础知识

1. 图像基础概念 像素:像素是一个图片的基本单位,pix是英语单词picture,加上英语单词“元素element”,就得到了pixel,简称px。所以“像素”有“图像元素”之意。分辨率:指的是图像的大小或者尺寸。比如 19…

代理IP是什么,有什么用?

一、什么是代理IP? 简单理解,代理IP是一座桥梁——你通过它连接到目标服务器,而不是直接暴露自己。这里的“IP”是网络世界中的地址标签,而代理IP在运行时,蹦跶到台前,成为目标服务器看到的那个“地址”。…

日常代码逻辑实现

日常代码逻辑实现: 1.防抖 解释: 防抖是指n秒内只执行一次,如果n秒内事件再次触发,则重新计算时间 应用场景: 搜索框输入联想(避免每次按键都发送请求)窗口尺寸调整 代码实现:…

北斗导航 | RTKLib中模糊度解算详解,公式,代码

模糊度解算 一、模糊度解算总体流程二、核心算法与公式推导1. **双差模糊度定义**2. **浮点解方程**三、LAMBDA算法实现细节1. **降相关变换(Z-transform)**2. **整数最小二乘搜索**3. **Ratio检验**四、部分模糊度固定(Partial Ambiguity Resolution, PAR)1. **子集选择策…

基于大模型的母婴ABO血型不合溶血病全方位预测与诊疗方案研究

目录 一、引言 1.1 研究背景与目的 1.2 国内外研究现状 1.3 研究方法与创新点 二、母婴 ABO 血型不合溶血病概述 2.1 发病机制 2.2 临床表现 2.3 流行病学特征 三、大模型在母婴 ABO 血型不合溶血病预测中的应用 3.1 模型选择与构建 3.2 预测指标与数据输入 3.3 模…

驱动-互斥锁

互斥锁可以说是“量值” 为 1 的 信号量, 最终实现的效果相同, 既然有了信号量, 那为什么还要有互斥锁呢? 这就是我们这里需要了解并掌握的 文章目录 参考资料互斥锁的介绍互斥锁结构体 - mutex互斥锁 API互斥锁实验源码程序-mute…

人工智能100问☞第17问:智能体的定义及其基本特征?

目录 一、通俗解释 二、专业解析 三、权威参考 智能体是能够通过传感器感知环境、自主决策并借助执行器采取行动以实现特定目标的智能实体或系统。 一、通俗解释 智能体就像一台能自己“看、想、动”的智能机器。比如你手机里的语音助手,它能听懂你说的话&…

Linux系统入门第十一章 --Shell编程之函数与数组

一、Shell函数 1、函数的用法 Shell函数可用于存放一系列的指令。在Shell脚本执行的过程中,函数被置于内存中,每次调用函数时不需要从硬盘读取,因此运行的速度比较快。在Shell编程中函数并非是必须的元素,但使用函数可以对程序进…

Baumer工业相机堡盟工业相机的工业视觉中为什么偏爱“黑白相机”

Baumer工业相机堡盟工业相机的工业视觉中为什么偏爱“黑白相机” Baumer工业相机​为什么偏爱“黑白相机”?​工业视觉中为什么倾向于多使用黑白相机黑白相机在工业视觉中的应用场景有哪些? Baumer工业相机 工业相机是常用与工业视觉领域的常用专业视觉…

MiM: Mask in Mask Self-SupervisedPre-Training for 3D Medical Image Analysis

Abstract Vision Transformer在3D医学图像分析的自监督学习(Self-Supervised Learning,SSL)中展现了卓越的性能。掩码自编码器(Masked Auto-Encoder,MAE)用于特征预训练,可以进一步释放ViT在各…

SQL注入的绕过方式

1.注释与空白符绕过 利用#,--,/**/替代被过滤的注释符 利用%09(Tab),%0A(换行) ,/**/代替空格:如union%0Aselect%0A1,2,3 2.编码绕过: URL编码,双重编码,十六进制编码,Unicode编…

数据加密方式(对称加密/非对称加密 /数字签名/证书)

文章目录 数据加密方式常用加密方式对比哈希算法(Hashing)哈希算法的特点常见的哈希算法哈希算法的应用哈希与加密的区别哈希算法的安全性问题 对称加密(Symmetric Encryption)工作原理主要特点常见的对称加密算法优缺点 非对称加…

UnityDots学习(五)

此篇开始研究实际应用到项目或个人Demo中。参考国外CodeMonkey的RTS包含一些基础API应用。 前言 游戏不必100%使用Dots完全实现。因为面向组件开发一个功能复杂度和调试都比面向对象要更难。对于某些模块,比如UI,事件管理系统,网络等&#…

移动端前端开发中常用的css

在开发移动端项目的时候,很多样式都是相同的,比如说图标大小,头像大小,页面底部保存(添加按钮),项目主体颜色等等,对于这些在项目中常用到的,通常都会写在公共样式中(pub…

Vue3 中 ref 与 reactive 的区别及底层原理详解

一、核心区别 1. 数据类型与使用场景 • ref 可定义基本类型(字符串、数字、布尔值)和对象类型的响应式数据。对于对象类型,ref 内部会自动调用 reactive 将其转换为响应式对象。 语法特点:需通过 .value 访问或修改数据&#…

AGV导航控制器技术方案——基于EFISH-SBC-RK3576/SAIL-RK3576的国产化革新‌(新一代工业级自主可控解决方案)‌

一、方案核心架构 ‌1. 硬件拓扑设计‌ ‌主控单元‌:SAIL-RK3576核心板(八核A72A53M0异构架构)‌传感器层‌: 双激光雷达(RS-LiDAR-16线 SICK TIM240)9轴IMU(BMI088) 轮式编码器&…

AI 辅助生成原型图

AI 辅助生成原型图 一、HTML 转设计稿工具介绍 网页转设计稿工具 使用 MasterGo 的 html-to-mastergo 插件可将网页转为设计稿,支持: 任意在线 HTML 文件(通过将 AI 生成的 UI 发布为在线页,可通过 Vercel 实现)离…