恋爱脑学Rust之Box与RC的对比

在遥远的某个小镇,住着一对年轻的恋人:阿丽和小明。他们的爱情故事就像 Rust 中的 Rc 和 Box 智能指针那样,有着各自不同的「所有权」和「共享」的理解。
故事背景
阿丽和小明准备共同养一株非常珍贵的花(我们称之为“心之花”)。对于如何照料这朵花,他们有了不同的思考——这就是 Rc 和 Box 两种智能指针的比喻。
第一种方案:阿丽的「共享」之爱 - Rc
阿丽觉得:心之花不仅属于她和小明,还应该是朋友和家人一起照看的共同财产。于是,他们决定用 Rc(引用计数指针)来管理心之花,这样花朵就可以属于多个拥有者。
在 Rust 的世界里,这种方式的“共享”就是 Rc 的特性:允许多个所有者对数据有共享访问权限,这在单线程环境中非常实用。阿丽想把花交给朋友们来照顾,每个人都可以在需要时欣赏和照料。
代码示例:Rc
use std::rc::Rc;fn main() {// 创建一个心之花实例,并使用 Rc 智能指针包装let heart_flower = Rc::new("Heart Flower".to_string());// 阿丽拥有了心之花的所有权let alis_flower = Rc::clone(&heart_flower); // Rc 允许多个所有者let ming_flower = Rc::clone(&heart_flower); // 小明也有了花的引用// 他们的朋友小美也得到了同样的花的引用let mei_flower = Rc::clone(&heart_flower);println!("心之花的引用计数: {}", Rc::strong_count(&heart_flower));println!("阿丽的花: {}", alis_flower);println!("小明的花: {}", ming_flower);println!("小美的花: {}", mei_flower);
}
在这种模式下,Rc 会统计引用计数(这里是3),这样多个持有者都可以照料这朵心之花。而当所有引用者(阿丽、小明、小美)都不再需要这朵花时,Rc 会自动释放内存。Rc 的多所有权让花朵可以自由地在朋友之间流转、共享,但这种共享只能在单线程环境中进行。
第二种方案:小明的「唯一」之爱 - Box
小明觉得,心之花就应该有一个唯一的所有者,并且只属于他和阿丽。小明认为对心之花的照料不应共享给别人,否则花会失去原本的意义。于是,他决定用 Box 来管理花的所有权。
在 Rust 中,Box 代表唯一所有权的指针,即一块堆上的内存空间只能有一个所有者。当 Box 被移动时,原来的拥有者会自动放弃控制权,这确保了所有权的唯一性。小明认为他们的爱应该是独特而专一的。
代码示例:Box
fn main() {// 使用 Box 包装心之花,表示其唯一所有权let heart_flower = Box::new("Heart Flower".to_string());// 将花的所有权移交给阿丽let alis_flower = heart_flower;// 编译器会报错,因为小明不能再持有这朵花// let ming_flower = heart_flower; // 错误!所有权已转移给阿丽println!("阿丽的花: {}", alis_flower);
}
在这里,阿丽是唯一的持有者,小明无法再直接拥有这朵心之花。如果他想和阿丽共同照料,花就必须一次次地转交,这样既能确保花的安全,也保持了独一无二的珍贵感。
总结:阿丽与小明爱情故事的比喻
Rc的共享之爱:Rc像阿丽的共享理念,多人共享访问,所有人都可以共同拥有心之花,并增加引用计数来管理。Box的唯一之爱:Box像小明的独占信念,所有权单一,只能有一个唯一的持有者,不允许随意转让。
这两种智能指针在 Rust 中适合不同的场景:当需要共享所有权时,Rc 是理想选择,而当独占所有权是必要时,Box 是最佳选择。Rust 的智能指针机制帮助阿丽和小明在自己的爱情中找到了平衡,使得心之花在不同场景中都绽放得美丽而安全。
相关文章:
恋爱脑学Rust之Box与RC的对比
在遥远的某个小镇,住着一对年轻的恋人:阿丽和小明。他们的爱情故事就像 Rust 中的 Rc 和 Box 智能指针那样,有着各自不同的「所有权」和「共享」的理解。 故事背景 阿丽和小明准备共同养一株非常珍贵的花(我们称之为“心之花”&…...
Rust 力扣 - 1423. 可获得的最大点数
文章目录 题目描述题解思路题解代码题目链接 题目描述 题解思路 题目所求结果存在下述等式 可获得的最大点数 所有卡牌的点数之和 - 长度为(卡牌数量 - k)的窗口的点数之和的最小值 我们遍历长度为(卡牌数量 - k)的窗口&#…...
Android15音频进阶之Cuttlefish搭建音频开发环境(九十二)
简介: CSDN博客专家、《Android系统多媒体进阶实战》一书作者 新书发布:《Android系统多媒体进阶实战》🚀 优质专栏: Audio工程师进阶系列【原创干货持续更新中……】🚀 优质专栏: 多媒体系统工程师系列【原创干货持续更新中……】🚀 优质视频课程:AAOS车载系统+…...
发现不为人知的AI宝藏:发现AI新天地! —— 《第八期》
在人工智能(AI)领域,尽管ChatGPT、Midjourney等知名产品广为人知,但还有许多小众而有趣的AI工具等待你的探索。本文将推荐五款实用的AI工具,它们不仅功能强大,而且使用简单,帮助你在各种场景中提…...
基于物联网设计的地下煤矿安全监测与预警
文章目录 一、前言1.1 项目介绍【1】项目开发背景【2】设计实现的功能【3】项目硬件模块组成 1.2 设计思路1.3 系统功能总结1.4 开发工具的选择【1】设备端开发【2】上位机开发 1.5 模块的技术详情介绍【1】NBIOT-BC26模块【2】MQ5传感器【4】DHT11传感器【5】红外热释电人体检…...
Java 23 的12 个新特性!!
Java 23 来啦!和 Java 22 一样,这也是一个非 LTS(长期支持)版本,Oracle 仅提供六个月的支持。下一个长期支持版是 Java 25,预计明年 9 月份发布。 Java 23 一共有 12 个新特性! 有同学表示&…...
.NET 8 中 Entity Framework Core 的使用
本文代码:https://download.csdn.net/download/hefeng_aspnet/89935738 概述 Entity Framework Core (EF Core) 已成为 .NET 开发中数据访问的基石工具,为开发人员提供了强大而多功能的解决方案。随着 .NET 8 和 C# 10 中引入的改进,开发人…...
ai数字人分身123口播克隆数字人小程序源码_博纳软云
功能配置 一、用户 用户管理小黑屋用户反馈登录设置短信参数 二、作品 视频作品背景音乐库背景音乐分类 三、形象分身 上传记录视频要求参数配置 四、声音克隆 克隆记录参数配置声音要求文案示例 五、AI文案 生成记录创作模型模型分类Al配置 六、充值 充值订单积分套…...
从0开始学PHP面向对象内容之(类,对象,构造/析构函数)
上期我们讲了面向对象的一些基本信息,这期让我们详细的了解一下 一、面向对象—类 1、PHP类的定义语法: <?php class className {var $var1;var $var2 "constant string";function classfunc ($arg1, $arg2) {[..]}[..] } ?>2、解…...
openGauss数据库-头歌实验1-5 修改数据库
一、查看表结构与修改表名 (一)任务描述 本关任务:修改表名,并能顺利查询到修改后表的结构。 (二)相关知识 为了完成本关任务,你需要掌握: 1.如何查看表的结构; 2.如…...
《JVM第3课》运行时数据区
无痛快速学习入门JVM,欢迎订阅本免费专栏 运行时数据区结构图如下: 可分为 5 个区域,分别是方法区、堆区、虚拟机栈、本地方法栈、程序计数器。这里大概介绍一下各个模块的作用,会在后面的文章展开讲。 类加载子系统会把类信息…...
阅读笔记 Contemporary strategy analysis Chapter 14
来源:Robert M. Grant - Contemporary strategy analysis (2018) Chapter 14 External Growth Strategies: Mergers, Acquisitions, and Alliances 合并、收购和联盟 Ⅰ Introduction and Objectives 企业并购与联盟是公司实现快速扩张的重要战略工具。通过这些手段…...
2024网鼎杯青龙组wp:Crypto2
题目 附件内容如下 # coding: utf-8 #!/usr/bin/env python2import gmpy2 import random import binascii from hashlib import sha256 from sympy import nextprime from Crypto.Cipher import AES from Crypto.Util.Padding import pad from Crypto.Util.number import long…...
能通过Ping命令访问CentOS 9 Stream,但在使用Xshell连接
能通过Ping命令访问CentOS 9 Stream,但在使用Xshell进行SSH连接失败 1. **确认SSH服务状态**:2. **检查SSH配置**:要检查和设置PermitRootLogin选项,您需要编辑SSH配置文件/etc/ssh/sshd_config。以下是具体步骤:1. 打…...
Oracle 第19章:高级查询技术
在Oracle数据库中,高级查询技术是数据库管理员和开发人员必须掌握的重要技能。这些技术能够帮助优化查询性能,简化复杂的查询逻辑,并提高数据处理的效率。本章将重点讨论两个关键概念:子查询和连接与并集操作。 子查询 定义: 子…...
Excel:vba运行时错误“7“:内存溢出错误
我这里出现这个错误是在批注中插入图片时报错 原因:我插入的图片不都是jpg的类型的,但是其中的两张图片是webp类型的,但是我把文件后缀名修改成了jpg,以为变成了jpg类型的图片,但是图片在批注里面无法显示,所以运行到第…...
【MyBatis源码】BoundSql分析
基础 BoundSql是对SQL语句及参数信息的封装,它是SqlSource解析后的结果。Executor组件并不是直接通过StaticSqlSource对象完成数据库操作的,而是与BoundSql交互。BoundSql是对Executor组件执行SQL信息的封装,具体实现代码如下: …...
KTHREAD--InitialStack和KernelStack和TSS的esp0
InitialStack和TSS.esp0的关系,在这里可以看到 mov ecx, [esi_KTHREAD.InitialStack] ; esi: newthread lea eax, [ecx-210h] ; 越过FPXSAVE指令存储地址 test byte ptr [eax-1Ah], 2 ; 判断efalgs寄存器的VIF位是否为1 jnz short loc_458743 sub eax, 10h…...
Skia基础运用(Ubuntu环境下使用BUILD.gn)
1.拉取代码 git clone https://skia.googlesource.com/skia python tools/git-sync-deps // 这一步可能会出现部分错误,再次执行直到成功 // 这里面拉取完三方库之后会拉取node,linux等压缩包,从google下载上面执行完,代码就完全…...
Vue中props和data的优先级哪个更高?
前言 Vue组件之间的数据传递是一个非常重要的环节。而在组件内部,我们经常会用到props和data来管理和传递数据。那么,问题来了:当props和data有冲突时,哪个优先级更高呢? 为了更好地理解这个问题,我们先来…...
C++_核心编程_多态案例二-制作饮品
#include <iostream> #include <string> using namespace std;/*制作饮品的大致流程为:煮水 - 冲泡 - 倒入杯中 - 加入辅料 利用多态技术实现本案例,提供抽象制作饮品基类,提供子类制作咖啡和茶叶*//*基类*/ class AbstractDr…...
2024年赣州旅游投资集团社会招聘笔试真
2024年赣州旅游投资集团社会招聘笔试真 题 ( 满 分 1 0 0 分 时 间 1 2 0 分 钟 ) 一、单选题(每题只有一个正确答案,答错、不答或多答均不得分) 1.纪要的特点不包括()。 A.概括重点 B.指导传达 C. 客观纪实 D.有言必录 【答案】: D 2.1864年,()预言了电磁波的存在,并指出…...
BCS 2025|百度副总裁陈洋:智能体在安全领域的应用实践
6月5日,2025全球数字经济大会数字安全主论坛暨北京网络安全大会在国家会议中心隆重开幕。百度副总裁陈洋受邀出席,并作《智能体在安全领域的应用实践》主题演讲,分享了在智能体在安全领域的突破性实践。他指出,百度通过将安全能力…...
C# SqlSugar:依赖注入与仓储模式实践
C# SqlSugar:依赖注入与仓储模式实践 在 C# 的应用开发中,数据库操作是必不可少的环节。为了让数据访问层更加简洁、高效且易于维护,许多开发者会选择成熟的 ORM(对象关系映射)框架,SqlSugar 就是其中备受…...
NFT模式:数字资产确权与链游经济系统构建
NFT模式:数字资产确权与链游经济系统构建 ——从技术架构到可持续生态的范式革命 一、确权技术革新:构建可信数字资产基石 1. 区块链底层架构的进化 跨链互操作协议:基于LayerZero协议实现以太坊、Solana等公链资产互通,通过零知…...
CMake 从 GitHub 下载第三方库并使用
有时我们希望直接使用 GitHub 上的开源库,而不想手动下载、编译和安装。 可以利用 CMake 提供的 FetchContent 模块来实现自动下载、构建和链接第三方库。 FetchContent 命令官方文档✅ 示例代码 我们将以 fmt 这个流行的格式化库为例,演示如何: 使用 FetchContent 从 GitH…...
智能仓储的未来:自动化、AI与数据分析如何重塑物流中心
当仓库学会“思考”,物流的终极形态正在诞生 想象这样的场景: 凌晨3点,某物流中心灯火通明却空无一人。AGV机器人集群根据实时订单动态规划路径;AI视觉系统在0.1秒内扫描包裹信息;数字孪生平台正模拟次日峰值流量压力…...
OPENCV形态学基础之二腐蚀
一.腐蚀的原理 (图1) 数学表达式:dst(x,y) erode(src(x,y)) min(x,y)src(xx,yy) 腐蚀也是图像形态学的基本功能之一,腐蚀跟膨胀属于反向操作,膨胀是把图像图像变大,而腐蚀就是把图像变小。腐蚀后的图像变小变暗淡。 腐蚀…...
华硕a豆14 Air香氛版,美学与科技的馨香融合
在快节奏的现代生活中,我们渴望一个能激发创想、愉悦感官的工作与生活伙伴,它不仅是冰冷的科技工具,更能触动我们内心深处的细腻情感。正是在这样的期许下,华硕a豆14 Air香氛版翩然而至,它以一种前所未有的方式&#x…...
Java求职者面试指南:Spring、Spring Boot、MyBatis框架与计算机基础问题解析
Java求职者面试指南:Spring、Spring Boot、MyBatis框架与计算机基础问题解析 一、第一轮提问(基础概念问题) 1. 请解释Spring框架的核心容器是什么?它在Spring中起到什么作用? Spring框架的核心容器是IoC容器&#…...
