@@ -26546,9 +26546,8 @@ <h1><a class="header" href="#スマートポインタ" id="スマートポイン
26546
26546
most often.
26547
26547
-->
26548
26548
<p><em>ポインタ</em>は、メモリのアドレスを含む変数の一般的な概念です。このアドレスは、何らかの他のデータを参照、または「指します」。
26549
- Rustにおいて、最もありふれた種類のポインタは、参照であり、第4章で習いましたね。参照は、
26550
- <code>&</code>記号で示唆され、指している値を借用します。データを参照すること以外に特別な能力は何もありません。
26551
- また、オーバーヘッドもなく、最も頻繁に使われる種類のポインタです。</p>
26549
+ Rustにおいて最もありふれた種類のポインタは参照です。参照については第4章で習いましたね。参照は<code>&</code>記号で示唆され、指している値を借用します。データを参照すること以外に特別な能力は何もありません。
26550
+ また、オーバーヘッドもなく、ポインタの中では最も頻繁に使われます。</p>
26552
26551
<!--
26553
26552
*Smart pointers*, on the other hand, are data structures that not only act like
26554
26553
a pointer but also have additional metadata and capabilities. The concept of
@@ -26561,18 +26560,18 @@ <h1><a class="header" href="#スマートポインタ" id="スマートポイン
26561
26560
the data.
26562
26561
-->
26563
26562
<p>一方、<em>スマートポインタ</em>は、ポインタのように振る舞うだけでなく、追加のメタデータと能力があるデータ構造です。
26564
- スマートポインタという概念は、Rustに特有のものではありません: スマートポインタは、C++に端を発し、
26563
+ スマートポインタという概念は、Rustに特有のものではありません。 スマートポインタは、C++に端を発し、
26565
26564
他の言語にも存在しています。Rustでは、標準ライブラリに定義された色々なスマートポインタが、
26566
26565
参照以上の機能を提供します。この章で探究する一つの例が、<em>参照カウント</em>方式のスマートポインタ型です。
26567
- このポインタにより、所有者の数を追いかけることでデータに複数の所有者を持たせることができ、
26568
- 所有者がいなくなったら、データの片付けをしてくれます 。</p>
26566
+ このポインタのおかげでデータに複数の所有者を持たせることができます。
26567
+ 所有者の数を追いかけ、所有者がいなくなったらデータの片付けをしてくれるからです 。</p>
26569
26568
<!--
26570
26569
In Rust, which uses the concept of ownership and borrowing, an additional
26571
26570
difference between references and smart pointers is that references are
26572
26571
pointers that only borrow data; in contrast, in many cases, smart pointers
26573
26572
*own* the data they point to.
26574
26573
-->
26575
- <p>所有権と借用の概念を使うRustで、参照とスマートポインタの別の差異は、参照はデータを借用するだけのポインタであることです;
26574
+ <p>所有権と借用の概念を使うRustにおいて、参照とスマートポインタにはもう1つ違いがあります。参照はデータを借用するだけのポインタなのです。
26576
26575
対照的に多くの場合、スマートポインタは指しているデータを<em>所有</em>します。</p>
26577
26576
<!--
26578
26577
We’ve already encountered a few smart pointers in this book, such as `String`
@@ -26582,10 +26581,9 @@ <h1><a class="header" href="#スマートポインタ" id="スマートポイン
26582
26581
and extra capabilities or guarantees (such as with `String` ensuring its data
26583
26582
will always be valid UTF-8).
26584
26583
-->
26585
- <p>その時は、スマートポインタとは呼ばなかったものの、第8章の<code>String</code>や<code>Vec<T></code>のように、
26586
- この本の中でいくつかのスマートポインタに遭遇してきました。これらの型はどちらも、
26587
- あるメモリを所有し、それを弄ることができるので、スマートポインタに数えられます。また、
26588
- メタデータ(キャパシティなど)や追加の能力、あるいは保証(<code>String</code>ならデータが常に有効なUTF-8であると保証することなど)もあります。</p>
26584
+ <p>私達はすでに、この本の中でいくつかのスマートポインタに遭遇してきました。例えば第8章の<code>String</code>や<code>Vec<T></code>です。ただし、私達はそれらをスマートポインタとは呼んでいませんでした。
26585
+ これらの型がどちらもスマートポインタに数えられるのは、あるメモリを所有しそれを弄ることができるからです。
26586
+ また、メタデータ(キャパシティなど)や追加の能力、あるいは保証(<code>String</code>ならデータが常に有効なUTF-8であると保証することなど)もあります。</p>
26589
26587
<!--
26590
26588
Smart pointers are usually implemented using structs. The characteristic that
26591
26589
distinguishes a smart pointer from an ordinary struct is that smart pointers
@@ -26597,7 +26595,7 @@ <h1><a class="header" href="#スマートポインタ" id="スマートポイン
26597
26595
why they’re important to smart pointers.
26598
26596
-->
26599
26597
<p>スマートポインタは普通、構造体を使用して実装されています。スマートポインタを通常の構造体と区別する特徴は、
26600
- スマートポインタは、 <code>Deref</code>と<code>Drop</code>トレイトを実装していることです。<code>Deref</code>トレイトにより、スマートポインタ構造体のインスタンスは、
26598
+ スマートポインタが <code>Deref</code>と<code>Drop</code>トレイトを実装していることです。<code>Deref</code>トレイトにより、スマートポインタ構造体のインスタンスは、
26601
26599
参照のように振る舞うことができるので、参照あるいはスマートポインタのどちらとも動作するコードを書くことができます。
26602
26600
<code>Drop</code>トレイトにより、スマートポインタのインスタンスがスコープを外れた時に走るコードをカスタマイズすることができます。
26603
26601
この章では、どちらのトレイトについても議論し、これらのトレイトがスマートポインタにとって重要な理由を説明します。</p>
@@ -26607,9 +26605,9 @@ <h1><a class="header" href="#スマートポインタ" id="スマートポイン
26607
26605
libraries have their own smart pointers, and you can even write your own. We’ll
26608
26606
cover the most common smart pointers in the standard library:
26609
26607
-->
26610
- <p>スマートポインタパターンがRustにおいてよく使われる一般的なデザインパターンだとして、この章では、全ての既存のスマートポインタを講義しません 。
26611
- 多くのライブラリに独自のスマートポインタがあり、自分だけのスマートポインタを書くことさえできます 。
26612
- 標準ライブラリの最もありふれたスマートポインタを講義します: </p>
26608
+ <p>スマートポインタパターンがRustにおいてよく使われる一般的なデザインパターンであることを考えれば、この章で既存のスマートポインタを全て取り扱うことなどできません 。
26609
+ 多くのライブラリに独自のスマートポインタがあり、自分だけのスマートポインタを書くことさえできるのです 。
26610
+ ここでは標準ライブラリの最もありふれたスマートポインタを取り扱っていきます。 </p>
26613
26611
<!--
26614
26612
* `Box<T>` for allocating values on the heap
26615
26613
* `Rc<T>`, a reference counting type that enables multiple ownership
@@ -26626,8 +26624,8 @@ <h1><a class="header" href="#スマートポインタ" id="スマートポイン
26626
26624
type exposes an API for mutating an interior value. We’ll also discuss
26627
26625
*reference cycles*: how they can leak memory and how to prevent them.
26628
26626
-->
26629
- <p>さらに、不変な型が、内部の値を可変化するAPIを晒す <em>内部可変性</em>パターンについても講義します 。
26630
- また、<em>循環参照</em>についても議論します: 循環参照により、メモリがリークする方法とそれを回避する方法です 。</p>
26627
+ <p>さらに、<em>内部可変性</em>パターンも扱います。そこでは不変な型が、内部の値を変更するためのAPIを公開するのです 。
26628
+ また、<em>循環参照</em>についても議論します。つまり、循環参照によっていかにしてメモリがリークするのか、そしてどうやってそれを回避するのかを議論します 。</p>
26631
26629
<!--
26632
26630
Let’s dive in!
26633
26631
-->
0 commit comments