Rust 中的“解引用”和智能指针与 MutexGuard 等

参考:使用 Deref trait 将智能指针当作常规引用处理 - Rust 程序设计语言 中文版

参考:Treating Smart Pointers Like Regular References - The Rust Programming Language

Rust 标准库提供 Deref trait 用于重载 * 运算符。

对于普通的引用类型如 p: &T,*p 意味着获取一个临时的 T。比如字段访问操作 p.a 会被编译器自动解引用,得到 (*p).a = t.a。

对于智能指针 p: Box<T>,由于 Box 类型实现了 Deref trait,所以可以执行 *p,而且 *p 的意思是:*(p.deref()),这里 p.deref() 得到 &T,而 *(p.deref()) 开头的 * 就是对普通引用 &T 的解引用操作了。

所以也可以说,Deref trait 使得我们可以从智能指针中获得普通引用,再对普通引用执行解引用。

有了 Deref trait,我们可以像使用普通引用那样使用智能指针和 MutexGuard 等。

而由于编译器有自动解引用(自动添加 *)的功能,所以我们可以像使用普通类型 T 那样使用 T 的普通引用类型(&T)。

综合以上两步,我们可以像使用普通类型 T 那样使用包裹 T 的智能指针和 MutexGuard。

最后简单聊聊解引用强制转换 (deref coercions)

最好直接去看参考。解引用强制转换是指在使用 &T 作为函数参数且 T 实现了 Deref trait 时,编译器可以通过调用 T::deref,将原本的参数 &T 转换成 &Target(&Target 为 deref 的返回值类型),用来匹配函数期望的参数类型。

相关推荐
学逆向的几秒前
C 内存属性
c语言·开发语言·算法·网络安全
康小旺30 分钟前
TypeScript 编译器开始卷 Rust 了:Cloudflare 的 tsrs 到底想干嘛?
rust·typescript
Norna34 分钟前
时间轮的 +1,为什么最后只留在顶层
rust
HAPPY酷2 小时前
C++ 自定义内存池优化点云处理:从裸指针到 RAII 自动回收
开发语言·c++
梦帮科技2 小时前
量子纠缠网络与量子隐形传态攻防:量子中继器信道串扰、纠缠态保真度降解与量子路由劫持
开发语言·网络·人工智能·算法·自动化·php
老王IT2 小时前
C语言语法基础语法介绍
c语言·开发语言·算法
code2cat3 小时前
Java高级篇之JDBC:连接数据库,完成查询、更新与事务
java·开发语言·数据库
hzxxxz3 小时前
PHP引擎两个高危漏洞复盘:计数顺序与旧地址缺陷的机理与处置清单
开发语言·php
马立杰3 小时前
PHP 未授权 RCE 应急响应:CVE-2026-109618 CVE-2026-109619 排查与加固实战
android·开发语言·php