🗒️
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