1
Help us understand the problem. What are the problem?

More than 1 year has passed since last update.

posted at

updated at

RustのCopy,Clone,Dropのメモ

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を使わなければならない。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
1
Help us understand the problem. What are the problem?