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を実装していないといけない. (元の実態が勝手に複製されている、みたいなことはあってはならない)