이유 [Copy
]하지를 구현하고 옵트 아웃 의미 대신에 선택 하에서의있을 수 있습니다 그 유형 Sync
및 Send
같은 자동 특성?
Copy
은이를 구현할 수있는 유형으로 자동으로 사용됩니다. 이 동작은 in December 2014으로 변경되었으므로 Rust 1.0 이전에는 너무 길지 않았습니다.
가능하면 Copy
특성을 항상 구현해야합니까?
반드시 그렇지는 않습니다. 라이브러리를 개발할 때 Copy
을 유형에 구현할지 여부는 순방향 호환성에 영향을 미칩니다. 유형에 Copy
구현을 제거하는 것은 큰 변화입니다 (해당 유형의 사용자는 이동하는 대신 복사하는 유형에 의존 할 수 있습니다). 따라서 semantic versioning을 존중하기 위해 라이브러리에 주요 버전 충돌이 부과됩니다. 특히 유형이 Copy
을 구현할 수 있지만 유형이 더 이상 Copy
을 구현할 수 없도록 진화 할 가능성이 있다고 생각하면 안전하게 재생하고 해당 유형에 Copy
을 구현하지 않아야합니다.
앞서 언급했듯이 Copy
을 구현하지 않은 또 다른 이유는 큰 유형입니다. 일반적으로 "Clone
이지만 Copy
이 아님"은 값 복제가 "저렴"하지 않음을 나타 내기 때문에 이러한 유형에만 Clone
을 구현하는 것이 유용 할 수 있습니다. 그러나 유형이 Copy
이 아니더라도 값을 이동하는 것만으로도 큰 메모리 복사 작업이 발생할 수 있습니다 (운이 좋으면 컴파일러에서 최적화 할 수도 있지만).
Copy
을 구현하면 유형 크기가 "커"인 경우 성능에 해칠 수 있습니까?
유형을 복사하지 않으면! 의 유일한 차이점은과 복사본 사이의 유일한 차이점은 이동으로 인해 소스를 사용할 수 없게 만듭니다 (예 : 이동 한 후 값을 사용하려고하면 컴파일러에서 오류가 발생 함) 반면 사본에는 해당하지 않습니다 '티; 두 작업 모두 얕은 메모리 복사본으로 구현됩니다.
[내 타입은 복사해야 할 때?] (https://doc.rust-lang.org/stable/std/marker/trait.Copy.html#when-should-my-type-be-copy) – ljedrz