Clone
Глубокое копирование типа или дублирование умного разделяемого указателя.
Можно получить через derive: ✅
// Copyright 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: для типов, у которых для сохранения инварианта значение не должно дублироваться. Мы коснёмся этого позже в идиоматичном Rust.