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 的返回值类型),用来匹配函数期望的参数类型。

相关推荐
小鱼仙官9 小时前
Windonws 视频存储,10s/不限时
开发语言·qt·音视频
csbysj20209 小时前
框架:构建高效解决方案的基石
开发语言
轻颂呀10 小时前
C++11——并发库介绍
开发语言·c++
AKA__Zas10 小时前
初识多线程(3.0)
java·开发语言·学习方法
小杍随笔10 小时前
【Rust 工具链管理工具再升级!rust-verse v1.3.1 ~ v1.3.5 最新更新深度解析】
开发语言·后端·rust
大数据三康11 小时前
在spyder进行的遗传算法练习
开发语言·python·算法
Vallelonga11 小时前
Rust 从结构体中取字段的引用
开发语言·rust
社交怪人11 小时前
【球体体积】信息学奥赛一本通C语言解法(题号1030)
c语言·开发语言
froginwe1111 小时前
Foundation 顶部导航栏详解
开发语言