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トレイトというものがあるらしい。なるほど。
今回読んでいる本はトレイトについてはもうちょっと先みたいなので楽しみに待っていることにしよう。
この記事が気に入ったらサポートをしてみませんか?