Rust 的 Deref 强制转换与智能指针自动解引用:编译器帮你省的代码

rust笔记8-Deref与隐式解引用强制转换 Rust 的智能指针和 Deref Trait 是 Rust 中非常重要的概念,它们使得 Rust 的引用和指针操作更加灵活和安全。下面我们将深入介绍 Deref Trait、Deref 与 &、* 运算符的关系,以及 Rust 的隐式解引用强制转换(Deref Coercion)。 阅读详情

Rust 的 Deref 强制转换与智能指针自动解引用:编译器帮你省的代码

cover

一、智能指针的"魔法":为什么 &String 能当 &str 用

刚学 Rust 的时候,有一个现象让我困惑了很久:函数参数类型是 &str,但传入 &String 也能编译通过。String 和 str 明明是两个不同的类型,为什么编译器不报错?

答案是 Deref 强制转换(Deref Coercion)。Rust 的 Deref trait 定义了类型的解引用行为:*T 等价于 T.deref()。当编译器发现类型不匹配时,会自动插入 deref() 调用,将一种引用类型转换为另一种。String 实现了 Deref<Target=str>,所以 &String 可以自动转换为 &str。

这个机制不仅适用于 String/str,还适用于所有智能指针:Box<T> 可以自动解引用为 &T,Vec<T> 可以自动解引用为 &[T],Rc<T> 可以自动解引用为 &T。理解 Deref 强制转换,是理解 Rust 智能指针体系的关键。

二、Deref 强制转换的底层机制

2.1 Deref Trait 定义

pub trait Deref {
    type Target: ?Sized;
    fn deref(&self) -> &Self::Target;
}

Deref trait 只有一个关联类型 Target 和一个方法 deref()。deref() 返回 &Self::Target——一个指向内部数据的不可变引用。

当编译器遇到 *x 时,如果 x 实现了 Deref,则 *x 等价于 *x.deref()——先调用 deref() 获取内部引用,再解引用获取值。

2.2 强制转换的三种场景

Deref 强制转换在三种场景下自动触发:

flowchart TD
    A[Deref 强制转换] --> B[场景 1: 函数参数类型不匹配]
    A --> C[场景 2: 方法调用时自动解引用]
    A --> D[场景 3: 连续链式解引用]

    B --> B1["fn foo(s: &str); foo(&string)"]
    B1 --> B2["&String → &str: String.deref()"]

    C --> C1["vec.push(1) 而非 (*vec).push(1)"]
    C1 --> C2["&Vec → &Vec: 无需解引用"]
    C1 --> C3["&Box Vec → &Vec → &Vec: 两级解引用"]

    D --> D1["&Box String → &String → &str"]
    D1 --> D2["编译器自动插入两次 deref() 调用"]

    subgraph 解引用链
        E[Box String] -->|deref| F[String]
        F -->|deref| G[str]
    end

场景 1:函数参数类型不匹配

fn print_len(s: &str) {
    println!("长度: {}", s.len());
}

let string = String::from("hello");
print_len(&string);  // &String 自动转换为 &str
// 编译器自动插入: print_len(string.deref())

场景 2:方法调用时自动解引用

Rust 的方法查找规则:先在 T 上查找方法,如果没找到,自动解引用 &T → &T::Target,继续查找。这个过程会递归进行,直到找到方法或无法继续解引用。

let boxed_vec = Box::new(vec![1, 2, 3]);
boxed_vec.push(4);  // Box<Vec<i32>> → &Vec<i32> → push()
// 编译器自动解引用: (*boxed_vec).push(4)

场景 3:连续链式解引用

let boxed_string = Box::new(String::from("hello"));
let s: &str = &boxed_string;  // &Box<String> → &String → &str
// 编译器自动插入两次 deref():
// boxed_string.deref().deref()

2.3 DerefMut 与可变解引用

DerefMut trait 是 Deref 的可变版本:

pub trait DerefMut: Deref {
    fn deref_mut(&mut self) -> &mut Self::Target;
}

DerefMut 要求实现者必须先实现 Deref(因为 DerefMut: Deref)。当需要 &mut T 但传入 &mut SmartPtr<T> 时,编译器自动调用 deref_mut() 进行转换。

关键约束:Deref 和 DerefMut 不能同时触发——如果已经通过 Deref 转换了一次,就不能再通过 DerefMut 转换。这保证了不会同时存在对同一数据的可变和不可变引用。

三、Rust 生产级代码实现

3.1 自定义智能指针

use std::ops::{Deref, DerefMut};

/// 自定义智能指针:带引用计数的智能指针(简化版 Rc)
pub struct MyRc<T> {
    inner: *mut RcInner<T>,
}

struct RcInner<T> {
    count: usize,
    value: T,
}

impl<T> MyRc<T> {
    pub fn new(value: T) -> Self {
        let inner = Box::into_raw(Box::new(RcInner {
            count: 1,
            value,
        }));
        Self { inner }
    }

    /// 获取引用计数
    pub fn strong_count(&self) -> usize {
        unsafe { (*self.inner).count }
    }
}

impl<T> Deref for MyRc<T> {
    type Target = T;

    fn deref(&self) -> &Self::Target {
        // 通过 Deref 强制转换,MyRc<T> 可以像 &T 一样使用
        unsafe { &(*self.inner).value }
    }
}

impl<T> DerefMut for MyRc<T> {
    fn deref_mut(&mut self) -> &mut Self::Target {
        unsafe { &mut (*self.inner).value }
    }
}

impl<T> Clone for MyRc<T> {
    fn clone(&self) -> Self {
        unsafe {
            (*self.inner).count += 1;
        }
        Self { inner: self.inner }
    }
}

impl<T> Drop for MyRc<T> {
    fn drop(&mut self) {
        unsafe {
            (*self.inner).count -= 1;
            if (*self.inner).count == 0 {
                // 引用计数归零,释放内存
                drop(Box::from_raw(self.inner));
            }
        }
    }
}

// 使用示例:
// let rc = MyRc::new(String::from("hello"));
// println!("{}", rc.len());  // Deref 强制转换: MyRc<String> → &String → &str
// println!("{}", &*rc);      // 显式解引用

3.2 Deref 强制转换的实际应用

/// 包装类型:带缓存的读取器
pub struct CachedReader<R> {
    inner: R,
    cache: Vec<u8>,
}

impl<R: std::io::Read> CachedReader<R> {
    pub fn new(inner: R) -> Self {
        Self {
            inner,
            cache: Vec::new(),
        }
    }

    pub fn read_cached(&mut self, buf: &mut [u8]) -> std::io::Result<usize> {
        if !self.cache.is_empty() {
            let n = std::cmp::min(buf.len(), self.cache.len());
            buf[..n].copy_from_slice(&self.cache[..n]);
            self.cache.drain(..n);
            return Ok(n);
        }
        self.inner.read(buf)
    }
}

impl<R> Deref for CachedReader<R> {
    type Target = R;

    fn deref(&self) -> &Self::Target {
        // 通过 Deref 强制转换,CachedReader 可以像底层 R 一样使用
        &self.inner
    }
}

impl<R> DerefMut for CachedReader<R> {
    fn deref_mut(&mut self) -> &mut Self::Target {
        &mut self.inner
    }
}

// 使用示例:
// let file = std::fs::File::open("data.txt")?;
// let mut reader = CachedReader::new(file);
// reader.read_cached(&mut buf)?;  // 使用缓存读取
// reader.metadata()?;              // Deref 强制转换,直接调用 File 的方法

3.3 Deref 与 AsRef 的区别

/// Deref vs AsRef 的选择指南

// Deref:用于智能指针的自动解引用,编译器隐式调用
// - 只能定义一种 Target(一个类型只能实现一次 Deref)
// - 编译器自动触发,无需显式调用
// - 适用于:智能指针(Box, Rc, String, Vec)

// AsRef:用于轻量级的类型转换,需要显式调用
// - 可以为同一类型实现多个 AsRef<T>
// - 需要显式调用 .as_ref() 或作为泛型约束
// - 适用于:接受多种输入类型的函数参数

use std::path::{Path, PathBuf};

// AsRef 示例:PathBuf 可以转换为 &Path
fn read_file(path: impl AsRef<Path>) -> std::io::Result<String> {
    std::fs::read_to_string(path.as_ref())
}

// 以下类型都可以传入:
// read_file("config.toml")       // &str → AsRef<Path>
// read_file(PathBuf::from("config.toml"))  // PathBuf → AsRef<Path>
// read_file(std::ffi::OsString::from("config.toml"))

// Deref 示例:PathBuf 可以自动解引用为 &Path
fn path_parent(path: &Path) -> Option<&Path> {
    path.parent()
}

let buf = PathBuf::from("/home/user/file.txt");
path_parent(&buf);  // &PathBuf 自动转换为 &Path

四、Trade-offs:Deref 强制转换的陷阱

4.1 隐式行为的可读性

Deref 强制转换是编译器隐式插入的,代码中没有显式的转换调用。这降低了代码的可读性——读者可能不知道 rc.len() 实际调用的是 str::len() 而非 MyRc::len()。在复杂的项目中,过多的 Deref 强制转换可能导致方法查找路径不直观。

4.2 不要为非智能指针类型实现 Deref

Rust 社区的共识是:Deref 应该只用于智能指针类型(拥有内部数据所有权的包装类型)。如果 MyWrapper 不是智能指针,不应该实现 Deref——应该使用 AsRef 或显式的方法代替。违反这个共识会让代码的使用者困惑,因为 Deref 强制转换暗示了"这个类型是指向内部数据的指针"。

4.3 适用边界

Deref 强制转换适用于以下场景:自定义智能指针类型、需要让包装类型透明地代理内部类型的方法、与标准库智能指针(Box/Rc/Arc/String/Vec)保持一致的使用模式。不适用于:非指针语义的包装类型(用 AsRef 代替)、需要多种目标类型的转换(Deref 只支持一种 Target)、需要显式控制转换时机的场景。

五、总结

Deref 强制转换是 Rust 智能指针体系的粘合剂,让包装类型可以像内部类型一样使用。核心要点如下:

  1. Deref trait:定义 deref() 方法,返回 &Self::Target,编译器在类型不匹配时自动调用。
  2. 三种触发场景:函数参数类型不匹配、方法调用自动解引用、连续链式解引用。
  3. DerefMut:可变版本的解引用,与 Deref 互斥,不能同时触发。
  4. Deref vs AsRef:Deref 用于智能指针的隐式转换,AsRef 用于显式的轻量级类型转换。
  5. 使用原则:只为智能指针类型实现 Deref,非指针类型用 AsRef。

Deref 强制转换让 Rust 的智能指针用起来像原生引用,这是"零成本抽象"的又一个体现——编译器帮你插入 deref() 调用,运行时没有任何额外开销。

zynq7020的arm A9核降频实录 zynq arm9 cortex a9 降频 阅读详情

相关推荐

从‘最长白列’到‘八邻域’:智能车图像巡线算法怎么选?我的踩坑经验分享

本文深入探讨了全国大学生智能汽车竞赛中图像巡线算法的选型与优化,对比了最长白列法、八邻域算法等五种主流方法的性能与适用场景。通过实战数据和代码示例,分析了各算法在直道、弯道及特殊赛道元素中的表现,并提供了内存优化、参数调整等实用技巧,帮助参赛团队提升智能车的巡线精度与效率。

weixin_30374009的博客 632

Rust自动解引用强制(自动解引用机制)(当调用一个对象的方法时,Rust会自动尝试解引用该对象的引用,以找到可以调用该方法的实例)(自动解引用特性)automatic dereferencing

,这是因为Rust语言的自动解引用强制(automatic dereferencing coercion)。当调用一个对象的方法时,Rust会自动尝试解引用该对象的引用,以找到可以调用该方法的实例。这种机制使得使用引用比较方便,因为你不需要在每次调用方法或访问属性时显式地解引用。,而Rust编译器会自动帮你处理解引用。自身上,而不是在引用上。但是,由于Rust的自动解引用特性,你可以在。s不是引用吗,为什么它不用解引用,就能调用。方法来获取字符串的长度,这个方法定义在。在Rust中,引用是通过。

Dontla的博客 1656

Cadence元件库介绍

Cadence安装完之后,在安装目录下,会有默认自带的一些常用元件库。例如,我的Candece安装目录为: D:\Cadence\Cadence_SPB_17.2-2016 元件库所在目录为: D:\Cadence\Cadence_SPB_17.2-2016\tools\capture\library 各个元件库对应的内容如下: AMPLIFIER.OLB 共 182 个零件,存放模拟放大器 IC,如 CA3280,TL027C,EL4093 等。 ARITHMETIC.OLB 共 182 个零件,存放

年少时的棉花糖 1万+

揭秘 Rust 的“隐身魔法”:自动解引用、强制转换与隐式借用

初学者常觉得这违反了 Rust “不隐式转换”的原则。但从设计哲学上看,这是严谨与实用安全防线(显式):涉及内存所有权转移(Move)或高开销内存拷贝(Clone)的操作必须显式。这保证了程序的性能边界是清晰的。体验优化(隐式):在引用之间的层级转换(Deref/Autoref)是安全且零成本的。Rust 自动处理这些繁琐的包装,是为了让你专注于业务逻辑,而不是在“星号汤”(&***ptr)中挣扎。Rust 只在不影响内存安全和性能预期的前提下,才为你提供这种“魔法”便利。

咚为 882

Brim与ZUI协同安装指南:从下载到流量分析实战

本文提供Brim与ZUI协同安装与实战指南,详细讲解从下载、环境变量配置到流量分析的全流程。通过将PCAP文件转换为ZNG格式,结合直观的Zed查询语言,这套组合能极大提升大型网络数据包的分析效率,是网络安全与运维人员进行高效流量分析的利器。

metal的博客 458

常用的数据结构以及常用的算法

常用的数据结构以及常用的算法 常用数据结构 数据结构是计算机存储、组织数据的方式。 数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。 通常情况下,精心选择的数据结构可以带来更高的运行或者存储效率。 数据结构往往同高效的检索算法和索引技术有关。 一、线性表 线性结构: 最常用、最简单的一种数据结构。 线性表: 典型的线性结构。基本特点是线性表中的 数据元素有序且有限。结构中: ① 存在一个唯一的被称为“第一个”的数据元素; ② 存在一个唯一的被称为“最后一个”的数据元素; ③ 除第一个元素外,每

qq_47605698的博客 1446

Rust 语言特性:Deref Trait 和 解引用

Rust中的解引用机制通过Deref trait实现,与C++的指针解引用不同。Rust的引用附加了生命周期、借用规则等安全机制。实现Deref trait的自定义类型(如MyBox)需要通过deref()方法返回内部值的引用,编译器会自动处理解引用操作。强制解引用转换功能允许类型自动转换为目标类型的引用,减少手动使用&和*操作符的需要。转换过程中会保持或收紧引用的可变性,但不会放宽限制。这一机制使智能指针的使用更加简洁安全。

Laurence的技术博客 1102

近几年预训练语音大模型汇总

语音大模型研究近年来取得显著进展,主要包括wav2vec 2.0(2020)、HuBERT(2021)、WavLM(2022)、Data2Vec(2022)、Whisper(2023)等代表性工作。这些模型采用自监督学习框架,通过掩码预测、对比学习等策略在大规模语音数据上预训练,可有效应用于语音识别、情感分析、疾病检测等下游任务。其中wav2vec 2.0首次将对比学习引入语音领域,Whisper通过68万小时弱监督数据实现强大的跨语言能力。这些突破为低资源语音任务提供了通用特征提取方案,推动了医疗语音分析

victory0431的博客 1777

【Rust】——通过Deref trait将智能指针当作常规引用处理

🎯追踪指针的值 🎯像引用一样使用Box 🎯自定义智能指针 🎯通过实现Deref trait 将某一类型像引用一样处理 🎯函数和方法的隐式Deref强制转换 🎯Deref强制转换如何与可变交互

shsjssnn的博客 2432

RT-DETR改进策略【卷积层】| ECCV-2024 小波卷积WTConv 增大感受野,降低参数量计算量,独家创新助力涨点

本文记录的是利用模块优化的目标检测网络模型。的目的是在不出现过参数化的情况下有效地增加卷积的感受野,从而解决了在感受野扩展中的参数膨胀问题。本文将其加入到深度可分离卷积中,有效降低模型参数量和计算量,并二次创新,使模块更好地捕捉低频特征,增强网络性能。Wavelet Convolutions for Large Receptive Fields小波卷积及其改进的实现代码如下: 四、创新模块 4.1 改进点1⭐ 模块改进方法:加入(第五节讲解添加步骤)。添加后如下:模块改进方法:基于的(第五节讲解添加步骤)

Limiiiing的博客 1503

6万字嵌入式最全八股文面试题大全及参考答案(持续更新)

进程上下文定义:进程上下文包含了进程执行时所需的所有信息,包括 CPU 寄存器的值、内核栈、任务控制块(TCB)等。作用:当进程被切换时,需要保存当前进程的上下文,并恢复下一个将要运行进程的上下文。中断上下文定义:中断上下文是指处理中断时 CPU 所处的状态,包括中断发生时的寄存器值等。作用:当中断发生时,CPU 会自动保存当前的上下文信息,并跳转到相应的中断处理程序。示例表格上下文描述进程上下文包含进程执行时的所有相关信息中断上下文处理中断时 CPU 所处的状态线程同步定义。

大模型大数据攻城狮的专栏 7923

Rust编程学习 - 自动解引用的用处,如何进行“解引用”(Deref) 是“取引用”(Ref) 的反操作

本文探讨了Rust中内部可变性、解引用和自动解引用的关键概念。首先解释了Cell类型的生命周期协变/逆变问题,指出UnsafeCell是实现内部可变性的唯一安全方式,禁止直接转换&T为&mut T以避免野指针。随后详细介绍了Rust的解引用机制,包括自定义解引用通过实现Deref trait,以及智能指针(如Box、String、Rc等)如何利用这一特性。最后阐述了自动解引用机制,编译器会隐式调用deref()来查找方法,使得智能指针能透明调用目标类型的方法,并以Rc<String&g

2301_79651252的博客 936

【Bug已解决】Codex Desktop 更新后无法启动/闪退解决方案

方案适用场景推荐指数清理本地缓存重启最常见、最应优先尝试的方案⭐⭐⭐⭐⭐完全卸载重装缓存清理无效时的进阶方案⭐⭐⭐⭐详细日志定位崩溃环节需要精确诊断问题原因⭐⭐⭐⭐锁定旧稳定版本确认是特定版本缺陷时的过渡方案⭐⭐⭐反馈官方支持团队自助方式无效时的最终途径⭐⭐⭐⭐Codex Desktop 更新后无法启动/闪退的本质通常是新版本程序在启动时读取到了旧版本遗留的、格式不兼容的本地缓存或配置数据,导致启动流程中途崩溃。

一键难忘的博客 6283

Rust之`Deref` 与 `DerefMut` 深度解析:解引用强制转换(Deref Coercion)的原理与应用(深度解析)

Rust中的Deref和DerefMutTrait实现了智能指针的"透明性",允许自定义解引用运算符(*)的行为。Deref定义了目标类型和解引用方法,而DerefMut扩展了可变解引用能力。核心价值在于它们激活了解引用强制转换(Deref Coercion),这种隐式类型转换在函数传参和方法调用时自动将智能指针(&Box<T>,&Rc<T>,&String等)递归转换为内部数据的引用(&T,&str等)。这种机制完美平衡了

AtomicVerse的博客 850

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

Rust 学习笔记:Deref trait

Rust 学习笔记:Deref trait

ProgramNovice的博客 1010

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Rust Deref 与 DerefMut:解引用强制转换和智能指针实践

在 Rust 类型系统中,Deref 与 DerefMut 是理解解引用强制转换和方法解析的关键概念。其原理是编译器在目标类型已知的位置按 Deref 链插入 deref/deref_mut 调用,使 &String 可转为 &str、&Vec<T> 可转为 &[T],并让 Box、Rc、Arc 等智能指针获得透明访问能力。技术价值在于减少样板代码、统一容器与借用视图 API,同时通过 DerefMut 约束可变性透传,保障共享所有权与 Pin 等场景的安全边界。工程实践中常见于字符串与切片参数、路径和 F

weixin_33483304的博客 275

Rust Deref与DerefMut:解引用强制转换与智能指针设计

在Rust类型系统中,Deref与DerefMut是一套克制的自动适配契约:实现者借出内部目标类型的引用,编译器只在函数实参、返回值、let标注等目标类型明确的位置触发解引用强制转换;方法调用则沿候选接收者链逐层解析,DerefMut还受Deref约束并决定可变展开能力。其技术价值在于让String与str、Vec与切片、PathBuf与Path等拥有型/借用型组合和方法复用更顺畅,同时降低智能指针、作用域守卫的访问转发成本。但方法解析污染、泛型约束不生效和借用冲突也带来工程风险,业务新类型更宜选AsRef

weixin_32430941的博客 186

Rust 集合即智能指针:用 Deref 为集合提供借用视图的惯用法

在 Rust 的所有权与借用体系中,`Vec<T>` 与切片 `&[T]`、`String` 与 `&str` 之间"所有者提供借用视图"的关系,是通过 `std::ops::Deref` 这一标准库 trait 实现的。本文以开源仓库 [patterns](https://link.gitcode.com/i/b95e601d5a16b9c2a4d418b873f986bf)(Rust Desi

gitblog_00512的博客 482

Rust 惯用法:函数参数优先使用借用类型(&str / &[T] / &T),让 Deref 强制转换为你工作

本文是开源仓库 **patterns**(Rust Design Patterns 目录,收录 Rust 设计模式、反模式与惯用法)中 [src/idioms/coercion-arguments.md](https://link.gitcode.com/i/8d714431c5c15f93e4e408e018307ccc) 一文的深度展开。它讲解 Rust 中一个高频且实用的 API 设计决策:

gitblog_00905的博客 1110

自定义智能指针的 Deref 与 DerefMut 机制:隐式解引用转换的边界

掌握Deref与DerefMut为智能指针赋予了最优雅、透明的调用体验;深刻理解编译器的三级隐式解引用强制转换规则;恪守“仅用于智能指针”的设计边界,保持类型系统的清晰与严谨。

no1coder的博客 594

Rust Deref与DerefMut详解:自动解引用、智能指针与封装边界

在Rust类型系统中,解引用并不等同于简单取地址,而是由Deref与DerefMut特型接管的隐式转换入口。其原理是deref返回内部目标的引用,再结合自动解引用与解引用强制转换,让智能指针、容器和newtype包装在调用方法、传参时更接近被包装类型,同时仍受所有权与借用检查约束。技术价值在于减少样板转发、提升API兼容性,但方法解析链和封装边界也可能被无意穿透。工程实践中,函数参数可优先考虑AsRef,集合键查找关注Borrow语义,带不变式校验的业务封装则应谨慎实现DerefMut,避免借用冲突与方法遮

weixin_33563728的博客 197

rust自动调用Deref(deepseek)

解引用强制多态是 Rust 在函数和方法的参数传递时自动执行的一系列解引用操作。当类型T实现了时,&T可以自动转换为&U。", name);hello(&m);// 自动发生:&MyBox<String> -> &String -> &str&self.0[1, 2, 3]);// 可以使用所有 Vec 的方法sv.push(4);println!("长度: {}", sv.len());println!("第一个: {}", sv[0]);

唐装鼠的主页 505

Rust 反模式(Anti-patterns)全解析:borrow_clone、deny-warnings 与 Deref 多态的识别与规避

**导读**:本文基于开源仓库 `gh_mirrors/pa/patterns`(Rust Design Patterns 一书)中的 [反模式章节](https://link.gitcode.com/i/2a5556918c546730f665a860e834582f) 及其三篇子文档,系统讲解 Rust 社区公认的三大反模式——「为通过借用检查而盲目 clone」、「在 crate 根用 `#

gitblog_00036的博客 1161

Rust的Deref与DerefMut trait:智能指针的核心

在Rust语言中,智能指针是管理内存和资源的重要工具,而Deref与DerefMut trait则是实现智能指针行为的关键。通过这两个trait,开发者可以自定义类型的解引用行为,使其像普通引用一样工作,同时还能结合Rust的所有权系统,确保内存安全。本文将深入探讨Deref与DerefMut的核心机制及其在智能指针中的应用。Deref trait允许类型通过实现deref方法来自定义解引用操作。Rust的Deref与DerefMut trait:智能指针的核心。

bmxzrx_271的博客 180

Rust Design Patterns 之 Deref 多态反模式:滥用 Deref 模拟继承的陷阱与正确替代方案

在 Rust 中,结构体之间不存在继承关系,而许多从 Java、C++ 转入 Rust 的开发者会本能地希望"让子类型复用父类型的方法"。本文基于本仓库 [anti_patterns 章节](https://link.gitcode.com/i/11ff99c9bd46a601295a3bc943abe1fc) 中的 **Deref 多态(Deref polymorphism)反模式**,系统讲解

gitblog_00091的博客 286

Rust——智能指针

Rust智能指针

JAN6055的博客 2321
上一篇: AI Agent 的工具调用机制:从 Function Calling 到 Rust 实现的 Tool Registry
下一篇: Rust 异步 TCP 与自定义协议解析:从字节流到结构化消息
第一程序员
博客等级 码龄1年 1万+粉丝 1802原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值