Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Clone

Иногда вы хотите сделать копию значения. Для этого служит трейт Clone.

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

fn say_hello(name: String) {
    println!("{name}, привет!")
}

fn main() {
    let name = String::from("Алиса");
    say_hello(name.clone());
    say_hello(name);
}
This slide should take about 2 minutes.
  • Идея Clone в том, чтобы было легко заметить места, где происходят выделения памяти в куче. Ищите .clone() и несколько других, например vec! или Box::new.

  • Обычное дело — «клонировать свой путь» через проблемы с анализатором заимствований, а потом возвращаться, чтобы попытаться оптимизировать эти клоны.

  • clone обычно выполняет глубокое копирование значения, то есть если, например, клонировать массив, клонируются и все его элементы.

  • Поведение clone задаёт пользователь, поэтому при необходимости он может выполнять собственную логику клонирования.