Я читаю return pointers part руководства Rust. Вот пример кода из него:Что происходит при возвращении указателей в ржавчине?
struct BigStruct {
one: int,
two: int,
// etc
one_hundred: int,
}
fn foo(x: Box<BigStruct>) -> BigStruct {
return *x;
}
fn main() {
let x = box BigStruct {
one: 1,
two: 2,
one_hundred: 100,
};
let y = box foo(x);
}
Сильная часть следующего объяснения меня смущает:
Там нет копии в этом коде. main выделяет достаточно места для поля «box», передает указатель на эту память в foo как x, , а затем foo записывает значение прямо в этот указатель. Это записывает возвращаемое значение непосредственно в выделенное поле.
прочитав a related question, я до сих пор не получаю не ксерокопию пункта здесь.
Выполняет ли функция foo
возвращает копию *x
? Если это так, как понять объяснение? Если это не так, это связано с владением и заимствованием?
Я понимаю концепцию собственности и заимствований, я просто не знаю, когда это произойдет.
Это, кажется, разумный и правильный ответ, основанный на том, что я читал недавно. Я помню, что C++ использовали аналогичный механизм. –
Кстати, у вас есть более подробные подсказки по темам, копирование и перемещение ...? Я почти прочитал все статьи, которые могу получить, кроме исходного кода. –
Предлагаю вам задать новый вопрос. Мы сможем дать вам более подробный ответ таким образом. –