所有権とは

Rustの所有権システムは、メモリ管理を安全かつ効率的に行うための独自の仕組みです。以下に所有権の基本的な概念を説明します。

所有権の基本ルール

  1. 各値は所有者と呼ばれる変数に対応している: Rustの各値は、所有者と呼ばれる変数に対応しています。所有者が存在する限り、その値は有効です。
  2. 一度に存在できる所有者は1つだけ: 値の所有権は一度に1つの変数だけが持つことができます。所有権が移動すると、元の所有者はその値を使用できなくなります。
  3. 所有者がスコープを抜けると値は破棄される: 所有者がスコープを抜けると、その値は自動的にメモリから解放されます。これにより、メモリリークを防ぎます。

所有権の移動

所有権は変数間で移動することができます。 所有権が移動すると、元の変数はその値を使用できなくなります。

以下のコードでは、s1"hello"の所有権を持っていましたが、let s2 = s1;によってその所有権がs2に移動しました。

#![allow(unused)]
fn main() {
let s1 = String::from("hello");
let s2 = s1; // s1からs2に所有権が移動
println!("{}", s2); // 出力: hello
}

その結果、s1はもう有効ではなくなり、使用できません。

#![allow(unused)]
fn main() {
let s1 = String::from("hello");
let s2 = s1; // s1からs2に所有権が移動
println!("{}", s1); // エラー: s1はもう有効ではない
}

所有権の移動は、メモリの安全性を確保するためのRustの仕組みです。これにより、同じメモリ領域を複数の変数が同時に所有することによるメモリリークやデータ競合を防ぎます。