<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>第15章 智能指针 on 编程那些事儿</title><link>https://before80.github.io/prgms/Rust/trpl/smart-pointers/</link><description>Recent content in 第15章 智能指针 on 编程那些事儿</description><generator>Hugo</generator><language>zh-cn</language><lastBuildDate>Tue, 11 Aug 2026 23:57:44 +0800</lastBuildDate><atom:link href="https://before80.github.io/prgms/Rust/trpl/smart-pointers/index.xml" rel="self" type="application/rss+xml"/><item><title>15.1 用 Box&lt;T&gt; 指向堆上的数据</title><link>https://before80.github.io/prgms/Rust/trpl/smart-pointers/01-box/</link><pubDate>Wed, 05 Aug 2026 08:44:00 +0800</pubDate><guid>https://before80.github.io/prgms/Rust/trpl/smart-pointers/01-box/</guid><description>&lt;blockquote&gt;
&lt;p&gt;译文 · 基于 &lt;a href="https://doc.rust-lang.org/stable/book/"&gt;The Rust Programming Language&lt;/a&gt;（rustc 1.97.1）&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h1 id="box-t"&gt;用 Box&lt;T&gt; 指向堆上的数据&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;原文链接: &lt;a href="https://doc.rust-lang.org/stable/book/ch15-01-box.html"&gt;https://doc.rust-lang.org/stable/book/ch15-01-box.html&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="用-boxt-指向堆上的数据"&gt;用 &lt;code&gt;Box&amp;lt;T&amp;gt;&lt;/code&gt; 指向堆上的数据&lt;/h2&gt;
&lt;p&gt;　　最直白的智能指针是 box，其类型写作 &lt;code&gt;Box&amp;lt;T&amp;gt;&lt;/code&gt;。&lt;strong&gt;Box&lt;/strong&gt; 让你把数据存放在堆上而不是栈上；留在栈上的只是指向堆数据的指针。可回顾第 4 章关于栈与堆的区别。&lt;/p&gt;</description></item><item><title>15.2 把智能指针当作常规引用</title><link>https://before80.github.io/prgms/Rust/trpl/smart-pointers/02-deref/</link><pubDate>Wed, 05 Aug 2026 08:44:00 +0800</pubDate><guid>https://before80.github.io/prgms/Rust/trpl/smart-pointers/02-deref/</guid><description>&lt;blockquote&gt;
&lt;p&gt;译文 · 基于 &lt;a href="https://doc.rust-lang.org/stable/book/"&gt;The Rust Programming Language&lt;/a&gt;（rustc 1.97.1）&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h1 id="把智能指针当作常规引用"&gt;把智能指针当作常规引用&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;原文链接: &lt;a href="https://doc.rust-lang.org/stable/book/ch15-02-deref.html"&gt;https://doc.rust-lang.org/stable/book/ch15-02-deref.html&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="treating-smart-pointers-like-regular-references"&gt;把智能指针当作常规引用&lt;/h2&gt;
&lt;p&gt;　　实现 &lt;code&gt;Deref&lt;/code&gt; 特征可以自定义&lt;strong&gt;解引用运算符&lt;/strong&gt; &lt;code&gt;*&lt;/code&gt; 的行为（不要与乘法或 glob 运算符混淆）。若以“智能指针可当作常规引用对待”的方式实现 &lt;code&gt;Deref&lt;/code&gt;，你就可以编写操作引用的代码，并让这些代码也能用于智能指针。&lt;/p&gt;</description></item><item><title>15.3 用 Drop Trait 在清理时运行代码</title><link>https://before80.github.io/prgms/Rust/trpl/smart-pointers/03-drop/</link><pubDate>Wed, 05 Aug 2026 08:44:00 +0800</pubDate><guid>https://before80.github.io/prgms/Rust/trpl/smart-pointers/03-drop/</guid><description>&lt;blockquote&gt;
&lt;p&gt;译文 · 基于 &lt;a href="https://doc.rust-lang.org/stable/book/"&gt;The Rust Programming Language&lt;/a&gt;（rustc 1.97.1）&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h1 id="drop-trait"&gt;用 Drop Trait 在清理时运行代码&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;原文链接: &lt;a href="https://doc.rust-lang.org/stable/book/ch15-03-drop.html"&gt;https://doc.rust-lang.org/stable/book/ch15-03-drop.html&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="用-drop-特征在清理时运行代码"&gt;用 &lt;code&gt;Drop&lt;/code&gt; 特征在清理时运行代码&lt;/h2&gt;
&lt;p&gt;　　对智能指针模式同样重要的第二个特征是 &lt;code&gt;Drop&lt;/code&gt;：它让你可以自定义值即将离开作用域时发生什么。你可以在任意类型上实现 &lt;code&gt;Drop&lt;/code&gt;，其中的代码可用于释放文件或网络连接等资源。&lt;/p&gt;</description></item><item><title>15.4 Rc&lt;T&gt;：引用计数智能指针</title><link>https://before80.github.io/prgms/Rust/trpl/smart-pointers/04-rc/</link><pubDate>Wed, 05 Aug 2026 08:44:00 +0800</pubDate><guid>https://before80.github.io/prgms/Rust/trpl/smart-pointers/04-rc/</guid><description>&lt;blockquote&gt;
&lt;p&gt;译文 · 基于 &lt;a href="https://doc.rust-lang.org/stable/book/"&gt;The Rust Programming Language&lt;/a&gt;（rustc 1.97.1）&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h1 id="rc-t"&gt;Rc&lt;T&gt;：引用计数智能指针&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;原文链接: &lt;a href="https://doc.rust-lang.org/stable/book/ch15-04-rc.html"&gt;https://doc.rust-lang.org/stable/book/ch15-04-rc.html&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="rct引用计数智能指针"&gt;&lt;code&gt;Rc&amp;lt;T&amp;gt;&lt;/code&gt;：引用计数智能指针&lt;/h2&gt;
&lt;p&gt;　　多数情况下，所有权很清晰：你确切知道哪个变量拥有某个值。但也有单个值可能有多个所有者的情形。例如在图数据结构中，多条边可能指向同一节点，而该节点在概念上由所有指向它的边共同拥有。除非没有任何边再指向它、因而没有所有者，否则不应清理该节点。&lt;/p&gt;</description></item><item><title>15.5 RefCell&lt;T&gt; 与内部可变性模式</title><link>https://before80.github.io/prgms/Rust/trpl/smart-pointers/05-interior-mutability/</link><pubDate>Wed, 05 Aug 2026 08:44:00 +0800</pubDate><guid>https://before80.github.io/prgms/Rust/trpl/smart-pointers/05-interior-mutability/</guid><description>&lt;blockquote&gt;
&lt;p&gt;译文 · 基于 &lt;a href="https://doc.rust-lang.org/stable/book/"&gt;The Rust Programming Language&lt;/a&gt;（rustc 1.97.1）&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h1 id="refcell-t"&gt;RefCell&lt;T&gt; 与内部可变性模式&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;原文链接: &lt;a href="https://doc.rust-lang.org/stable/book/ch15-05-interior-mutability.html"&gt;https://doc.rust-lang.org/stable/book/ch15-05-interior-mutability.html&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="refcellt-与内部可变性模式"&gt;&lt;code&gt;RefCell&amp;lt;T&amp;gt;&lt;/code&gt; 与内部可变性模式&lt;/h2&gt;
&lt;p&gt;　　&lt;strong&gt;内部可变性&lt;/strong&gt;（interior mutability）是 Rust 中的一种设计模式：即便存在指向某数据的不可变引用，仍允许你修改该数据；通常借用规则禁止这种做法。为了修改数据，该模式在数据结构内部使用 &lt;code&gt;unsafe&lt;/code&gt; 代码，以绕开 Rust 通常对修改与借用的规则。&lt;code&gt;unsafe&lt;/code&gt; 代码向编译器表明：我们手动检查规则，而不是依赖编译器代劳；第 20 章会更深入讨论不安全代码。&lt;/p&gt;</description></item><item><title>15.6 引用循环可能导致内存泄漏</title><link>https://before80.github.io/prgms/Rust/trpl/smart-pointers/06-reference-cycles/</link><pubDate>Wed, 05 Aug 2026 08:44:00 +0800</pubDate><guid>https://before80.github.io/prgms/Rust/trpl/smart-pointers/06-reference-cycles/</guid><description>&lt;blockquote&gt;
&lt;p&gt;译文 · 基于 &lt;a href="https://doc.rust-lang.org/stable/book/"&gt;The Rust Programming Language&lt;/a&gt;（rustc 1.97.1）&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h1 id="引用循环可能导致内存泄漏"&gt;引用循环可能导致内存泄漏&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;原文链接: &lt;a href="https://doc.rust-lang.org/stable/book/ch15-06-reference-cycles.html"&gt;https://doc.rust-lang.org/stable/book/ch15-06-reference-cycles.html&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="引用循环可能导致内存泄漏-1"&gt;引用循环可能导致内存泄漏&lt;/h2&gt;
&lt;p&gt;　　Rust 的内存安全保证让你很难、但并非不可能意外创建永远不会被清理的内存（称为&lt;strong&gt;内存泄漏&lt;/strong&gt;，memory leak）。完全防止内存泄漏并不是 Rust 的保证之一，这意味着在 Rust 中内存泄漏仍属内存安全。通过使用 &lt;code&gt;Rc&amp;lt;T&amp;gt;&lt;/code&gt; 与 &lt;code&gt;RefCell&amp;lt;T&amp;gt;&lt;/code&gt; 可以看到 Rust 允许内存泄漏：可以创建各项彼此引用的循环引用。这会造成内存泄漏，因为循环中每一项的引用计数永远到不了 0，值也就永远不会被丢弃。&lt;/p&gt;</description></item></channel></rss>