Clone

型をディープコピーするか、共有可能なスマートポインタを複製します。

derive 可能: ✅

// 著作権 2025 Google LLC
// SPDX-License-Identifier: Apache-2.0

use std::collections::BTreeSet;
use std::rc::Rc;

#[derive(Clone)]
pub struct LotsOfData {
    string: String,
    vec: Vec<u8>,
    set: BTreeSet<u8>,
}

fn main() {
    let lots_of_data = LotsOfData {
        string: "String".to_string(),
        vec: vec![1; 255],
        set: BTreeSet::from_iter([1, 2, 3, 4, 5, 6, 7, 8]),
    };

    // `lots_of_data` 内のすべてのデータをディープコピーする。
    let lots_of_data_cloned = lots_of_data.clone();

    let reference_counted = Rc::new(lots_of_data);

    // 値ではなく、参照カウント付きポインタをコピーする。
    let reference_copied = reference_counted.clone();
}
  • 値を「ディープコピー」するか、Rc/Arc のような参照カウント付き ポインタの場合は、そのポインタの新しいインスタンスを作成します。

  • 実装/derive しないべき場合: 不変条件を維持するために、その 値は複製されるべきではない型です。これについては、Idiomatic Rust の後の方で触れます。