mox692 のブログ

妄想の書き留め場所.

Rustお勉強メモ

copy, cloneあたりの記事を読んで、そのメモ 意外と基礎が抜けていたり.

Moveについて

  • moveは基本 shallow copy. objectごとにcopyしたりはしない

Copyについて

  • コンパイラによって自動的に実装される.
    • stack上にcopyが置かれる
  • heapを指している(ものを含んでいる)ような型には実装できない
    • スマートポインタ系 (Box, Cell, Rc etc...) や Vec, Stringなど
    • heapを指している型を含んでる型を複製したかったら、Cloneを実装する
  • copyを生成する際は、元のObjectを参照しない. (Cloneの部分にその逆を書いた)

Cloneについて

  • &selfを材料にして、Userによって振る舞いを定義できる
  • heapを指しているような型にも実装できる
    • (デフォルトの動きとしては)指してる先のheap上のObjectも複製した上で、stack上にそのデータを指す変数を新たに生成する.

raw pointerとデリファレンス

  • row pointer自体は幾つでも複製できる. (幾つでもrawpointerの所有者を作れる)
  • ただし、それをdereferenceしようとすると、Copyを実装していないといけない. (元の実態が勝手に複製されている、みたいなことはあってはならない)

参考

hashrust.com

/* -----codeの行番号----- */