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