|
|
|
@ -8260,7 +8260,7 @@ commit 4f2dc564851dc04b271a2260c834643dfd86c724</p>
|
|
|
|
|
<ul>
|
|
|
|
|
<li><code>Box<T></code>,用于在堆上分配值</li>
|
|
|
|
|
<li><code>Rc<T></code>,一个引用计数类型,其数据可以有多个所有者</li>
|
|
|
|
|
<li><code>RefCell<T></code>,其本身并不是只能指针,不过它管理智能指针<code>Ref</code>和<code>RefMut</code>的访问,在运行时而不是在编译时执行借用规则。</li>
|
|
|
|
|
<li><code>RefCell<T></code>,其本身并不是智能指针,不过它管理智能指针<code>Ref</code>和<code>RefMut</code>的访问,在运行时而不是在编译时执行借用规则。</li>
|
|
|
|
|
</ul>
|
|
|
|
|
<p>同时我们还将涉及:</p>
|
|
|
|
|
<ul>
|
|
|
|
@ -8446,7 +8446,7 @@ struct that holds mp3 file data and metadata</span></p>
|
|
|
|
|
<li>从<code>&mut T</code>到<code>&U</code>当<code>T: Deref<Target=U></code>。</li>
|
|
|
|
|
</ul>
|
|
|
|
|
<p>头两个情况除了可变性之外是相同的:如果有一个<code>&T</code>,而<code>T</code>实现了返回<code>U</code>类型的<code>Deref</code>,可以直接得到<code>&U</code>。对于可变引用也是一样。最后一个有些微妙:如果有一个可变引用,它也可以强转为一个不可变引用。反之则是_不可能_的:不可变引用永远也不能强转为可变引用。</p>
|
|
|
|
|
<p><code>Deref</code> trait 对于只能指针模式十分重要的原因在于智能指针可以被看作普通引用并用于期望使用引用的地方。例如,无需重新编写方法和函数来直接获取智能指针。</p>
|
|
|
|
|
<p><code>Deref</code> trait 对于智能指针模式十分重要的原因在于智能指针可以被看作普通引用并用于期望使用引用的地方。例如,无需重新编写方法和函数来直接获取智能指针。</p>
|
|
|
|
|
<a class="header" href="#drop-trait-运行清理代码" name="drop-trait-运行清理代码"><h2><code>Drop</code> Trait 运行清理代码</h2></a>
|
|
|
|
|
<blockquote>
|
|
|
|
|
<p><a href="https://github.com/rust-lang/book/blob/master/second-edition/src/ch15-03-drop.md">ch15-03-drop.md</a>
|
|
|
|
@ -10035,15 +10035,15 @@ to know about. /Carol -->
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
<!-- Mobile navigation buttons -->
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
@ -10056,7 +10056,7 @@ to know about. /Carol -->
|
|
|
|
|
</script>
|
|
|
|
|
|
|
|
|
|
<!-- Livereload script (if served using the cli tool) -->
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<script src="highlight.js"></script>
|
|
|
|
|
<script src="book.js"></script>
|
|
|
|
|