5
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

RustのCopy,Clone,Dropのメモ

Last updated at Posted at 2020-04-19

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を使わなければならない。
5
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?