Copyトレイト
変数への代入や関数の引数に渡したりするときに、メモリのビット単位のコピーにより複製が作られる。
基本型、基本型のみのタプルと構造体など、主にサイズが小さい構造体などに使う。
Clone
トレイトも同時に実装しなければならないが、コピーする際にclone()
が暗黙的に呼び出されるわけではない (参考)。
メンバがすべてCopy
でないといけない(基本型はすべてCopy
を実装している)。
Drop
トレイトとは競合する。
Drop
トレイトに適合する型を持つ構造体にCopy
注釈はつけられない。
Cloneトレイト
基本的にはdeep copyを実装する。
基本型についてはdeep copyとshallow copyに違いがないので、暗黙にclone
される。
Dropトレイト
所有権を持つ変数がスコープから抜けるときにdrop
が実行される。
主にヒープに保持される型、もしくは、それらの型をメンバに含む場合に使用される。
Copy
トレイトとは競合する。
関数に引数で渡したり、変数に代入した場合
-
Copy
を実装している場合:メモリのビット単位コピーで複製が作られる。 -
Copy
でない場合:所有権が移動される。- 複製(deep copy)を作る場合は明示的に
clone
を呼び出す。 - ムーブでないshallow copyをしたければ
Rc
を使わなければならない。
- 複製(deep copy)を作る場合は明示的に