Upgrade to Pro — share decks privately, control downloads, hide ads and more …

借用のおかげでclone()を壊せない

 借用のおかげでclone()を壊せない

#[derive(Clone, Debug)]
struct Pair(Box, &'a i32);

fn main() {
let mut num = 2;
let pair = Pair(Box::new(1), &num);
num = 3;
let mut moved_pair = pair.clone();
*moved_pair.0 = 4;

println!("original: {:?}", pair);
println!("copy: {:?}", moved_pair);
}

Bb4943c6ae1f841c22da2a2142fd8b49?s=128

Kaito Udagawa

January 24, 2022
Tweet

Other Decks in Programming

Transcript

  1. 借用のおかげで clone()を壊せない Rustの所有権と借用の概念は頑丈すぎる www

  2. コードと結果

  3. 何がしたかったか 01 構造体のポインタの参照先を書き換えたかった 02 clone()しても元のデータを書き換えたらclone先も 書き変わるケースがあることを示したかった 03 clone()はディープコピーではないことを示したかっ た

  4. 起こったこと 普通のポインタ: 他の場所で参照されている と借用マークがつく その場合、コンパイラが書 き換えをブロックする スマートポインタ(Box): ポインタがコピーされた段 階で中身もコピーされるの でディープコピーになる

  5. 得られた結論 C++なら死んでいた Rustスゴイ!

  6. ありがとうござい ました ポケGOガチ勢のポートフォリオです: https://www.kaito.tokyo/