見出し画像

Rustの構造体とcopy/move

前回の続き

Rustを勉強しています。

ここに載っているプログラム例。

// 上記URLより引用
fn area(rectangle: &Rectangle) -> u32 {
   rectangle.width * rectangle.height
}

tupleの時は参照にしなくて良くて、構造体のときは参照にしているところに引っかかった。なんとなく、C/C++とかの感覚だと

let rect1 = Rectangle { width: 30, height: 50 };

で作られたデータは別の変数に代入するとcopyになりそうな気がしてしまう。でも、実際は以下のコードはエラーになるので、構造体はcopyではなくmoveされるっぽい。

   let rect1 = Rectangle { width: 30, height: 50 };
   let rect_x = rect1;
   println!("{}", rect1.width);
     println!("{}", rect1.width);
                   ^^^^^^^^^^^ value borrowed here after move

ということは、tupleはcopyになり、構造体はmoveになるっぽいまで見えてきた。どういう整理なんだろうと思ったらCopyトレイトというものがあるらしい。なるほど。

今回読んでいる本はトレイトについてはもうちょっと先みたいなので楽しみに待っていることにしよう。

この記事が気に入ったらサポートをしてみませんか?