Clone

ときには、値のコピーを 作りたくなる ことがあります。Clone トレイトはこれを実現します。

// Copyright 2023 Google LLC
// SPDX-License-Identifier: Apache-2.0

fn say_hello(name: String) {
    println!("Hello {name}")
}

fn main() {
    let name = String::from("Alice");
    say_hello(name.clone());
    say_hello(name);
}
  • Clone の考え方は、ヒープ割り当てがどこで発生しているかを見つけやすくすることです。.clone() や、vec!Box::new のようなものを探してください。

  • 借用チェッカーの問題を clone で切り抜け、あとで戻ってきてそれらの clone を取り除くよう最適化を試みる、というのはよくあることです。

  • 一般に clone は値のディープコピーを行います。つまり、たとえば配列を clone すると、その配列のすべての要素も同様に clone されます。

  • clone の挙動はユーザー定義なので、必要であればカスタムのクローンロジックを実行できます。