Rust in Action Notes 第 4 章 ライフサイクル、所有権、借入

  1. 第 4 章では、惑星通信の例を使用してテーマ全体を説明します。主要な登場人物は地上局と CubeSat であり、どちらも異なる状態を持ち、相互にメッセージを送信できます。

  2. Rust には、関数の型と戻り値をチェックするタイプ セーフティ (型安全) メカニズムがあります。カスタム型 (struct で宣言) に非組み込み型 (コピー機能を実装する i32、bool など) が含まれている場合、関数のパラメーターとして使用されると、移動 (移動) セマンティクスがトリガーされ、その所有権は関数の仮パラメーターに移動されます。図 4.2 は、所有権移転の非常に直観的なプロセスを示しています。図4.2

  3. コード 4.5 と 4.6 は、コピー セマンティクスを持つ組み込み型と移動セマンティクスを持つ一般型の違いを示しています。一方はコンパイル可能で、もう一方はコンパイルできません。主な違いは、コピー トレイトが実装されているかどうかです。

  4. 所有者 (オーナー) は、特定の値の所有権 (所有権) を持ちます。所有者のライフ サイクルに達すると (コード ブロックの終わりに達するなどの理由で)、そのデストラクター (デストラクター) が呼び出されます。デストラクターは、それに関連するすべての参照 (リファレンス) を削除し、メモリを解放します。デストラクターのほとんどは、暗黙的に呼び出されます。これはコンパイラーによって行われます。アンセーフ ブロックによって実装されるメモリ割り当てで使用する必要があります。

  5. 所有権を譲渡するには 2 つの方法があり、1 つはletキーワードを介してオブジェクトを変数にバインドする変数バインディングであり、もう 1 つは関数を介して(関数パラメータまたは戻り値にすることができます)、詳細については 115 ページを参照してください。

  6. 所有権の問題を解決するための 4 つの便利な習慣があります: a. 完全な所有権が必要ない場合は、参照 (参照) を使用できます (詳細はセクション 4.5.1 を参照); b. コピー特性を持つ値については、直接コピーできます (詳細はセクション 4.5.2 を参照) c. 存続期間の長いオブジェクトを最小限に抑えるためにコードをリファクタリングします (詳細はセクション 4.5.3 を参照してください); セクション 4.5.4 を参照してください。

  7. Cloneとの違いはCopy、以下の表 4.2 で詳しく比較されています。表4.2

  8. std::rc::Rc<T>Copy が使用されない理由は 3 つあります。a. Copy の前提は、小さなパフォーマンス コストのみを導入することです。つまり、データが小さい場合 (デジタル i32、i64 など)、Copy の使用によるパフォーマンスの損失は最小限です。b. Copy はビットレベルのコピーであり、参照の処理は正確ではない可能性があります。c. 一部の型はClone をオーバーロードします。

  9. これにより内部Rc<RefCell<T>>可変性が実現され、同時に実行時のオーバーヘッドが若干発生します。Clone の使用コストが高すぎる場合は、マルチスレッド安全ではないRc<RefCell<T>>代替手段として使用できます。詳細については、132 ページを参照してください。Rc<RefCell<T>>

おすすめ

転載: blog.csdn.net/Mint2yx4/article/details/131164511