# Trait std::clone::Clone 1.0.0 [−] [src]

    pub trait Clone {
        fn clone(&self) -> Self;

        fn clone_from(&mut self, source: &Self) { ... }
    }

A common trait for cloning an object.

This trait can be used with `#[derive]`.

Types that are `Copy` should have a trivial implementation of `Clone`. More formally: if `T: Copy`, `x: T`, and `y: &T`, then `let x = y.clone();` is equivalent to `let x = *y;`. Manual implementations should be careful to uphold this invariant; however, unsafe code must not rely on it to ensure memory safety.

## Required Methods

### `fn clone(&self) -> Self`

Returns a copy of the value.

# Examples

fn main() { let hello = "Hello"; // &str implements Clone assert_eq!("Hello", hello.clone()); }

    let hello = "Hello"; // &str implements Clone

    assert_eq!("Hello", hello.clone());

## Provided Methods

### `fn clone_from(&mut self, source: &Self)`

Performs copy-assignment from `source`.

`a.clone_from(&b)` is equivalent to `a = b.clone()` in functionality, but can be overridden to reuse the resources of `a` to avoid unnecessary allocations.

## Implementors

- `impl<T> Clone for Wrapping<T> where T: Clone`
- `impl Clone for ParseFloatError`
- `impl Clone for FpCategory`
- `impl Clone for TryFromIntError`
- `impl Clone for ParseIntError`
- `impl<T> Clone for NonZero<T> where T: Zeroable + Clone`
- `impl<T> Clone for *const T where T: ?Sized`
- `impl<T> Clone for *mut T where T: ?Sized`
- `impl<Ret> Clone for fn() -> Ret`
- `impl<Ret> Clone for extern fn() -> Ret`
- `impl<Ret> Clone for unsafe fn() -> Ret`
- `impl<Ret> Clone for unsafe extern fn() -> Ret`
- `impl<Ret, A> Clone for fn(A) -> Ret`
- `impl<Ret, A> Clone for extern fn(A) -> Ret`
- `impl<Ret, A> Clone for unsafe fn(A) -> Ret`
- `impl<Ret, A> Clone for unsafe extern fn(A) -> Ret`
- `impl<Ret, A, B> Clone for fn(A, B) -> Ret`
- `impl<Ret, A, B> Clone for extern fn(A, B) -> Ret`
- `impl<Ret, A, B> Clone for unsafe fn(A, B) -> Ret`
- `impl<Ret, A, B> Clone for unsafe extern fn(A, B) -> Ret`
- `impl<Ret, A, B, C> Clone for fn(A, B, C) -> Ret`
- `impl<Ret, A, B, C> Clone for extern fn(A, B, C) -> Ret`
- `impl<Ret, A, B, C> Clone for unsafe fn(A, B, C) -> Ret`
- `impl<Ret, A, B, C> Clone for unsafe extern fn(A, B, C) -> Ret`
- `impl<Ret, A, B, C, D> Clone for fn(A, B, C, D) -> Ret`
- `impl<Ret, A, B, C, D> Clone for extern fn(A, B, C, D) -> Ret`
- `impl<Ret, A, B, C, D> Clone for unsafe fn(A, B, C, D) -> Ret`
- `impl<Ret, A, B, C, D> Clone for unsafe extern fn(A, B, C, D) -> Ret`
- `impl<Ret, A, B, C, D, E> Clone for fn(A, B, C, D, E) -> Ret`
- `impl<Ret, A, B, C, D, E> Clone for extern fn(A, B, C, D, E) -> Ret`
- `impl<Ret, A, B, C, D, E> Clone for unsafe fn(A, B, C, D, E) -> Ret`
- `impl<Ret, A, B, C, D, E> Clone for unsafe extern fn(A, B, C, D, E) -> Ret`
- `impl<Ret, A, B, C, D, E, F> Clone for fn(A, B, C, D, E, F) -> Ret`
- `impl<Ret, A, B, C, D, E, F> Clone for extern fn(A, B, C, D, E, F) -> Ret`
- `impl<Ret, A, B, C, D, E, F> Clone for unsafe fn(A, B, C, D, E, F) -> Ret`
- `impl<Ret, A, B, C, D, E, F> Clone for unsafe extern fn(A, B, C, D, E, F) -> Ret`
- `impl<Ret, A, B, C, D, E, F, G> Clone for fn(A, B, C, D, E, F, G) -> Ret`
- `impl<Ret, A, B, C, D, E, F, G> Clone for extern fn(A, B, C, D, E, F, G) -> Ret`
- `impl<Ret, A, B, C, D, E, F, G> Clone for unsafe fn(A, B, C, D, E, F, G) -> Ret`
- `impl<Ret, A, B, C, D, E, F, G> Clone for unsafe extern fn(A, B, C, D, E, F, G) -> Ret`
- `impl<Ret, A, B, C, D, E, F, G, H> Clone for fn(A, B, C, D, E, F, G, H) -> Ret`
- `impl<Ret, A, B, C, D, E, F, G, H> Clone for extern fn(A, B, C, D, E, F, G, H) -> Ret`
- `impl<Ret, A, B, C, D, E, F, G, H> Clone for unsafe fn(A, B, C, D, E, F, G, H) -> Ret`
- `impl<Ret, A, B, C, D, E, F, G, H> Clone for unsafe extern fn(A, B, C, D, E, F, G, H) -> Ret`
- `impl<Ret, A, B, C, D, E, F, G, H, I> Clone for fn(A, B, C, D, E, F, G, H, I) -> Ret`
- `impl<Ret, A, B, C, D, E, F, G, H, I> Clone for extern fn(A, B, C, D, E, F, G, H, I) -> Ret`
- `impl<Ret, A, B, C, D, E, F, G, H, I> Clone for unsafe fn(A, B, C, D, E, F, G, H, I) -> Ret`
- `impl<Ret, A, B, C, D, E, F, G, H, I> Clone for unsafe extern fn(A, B, C, D, E, F, G, H, I) -> Ret`
- `impl<Ret, A, B, C, D, E, F, G, H, I, J> Clone for fn(A, B, C, D, E, F, G, H, I, J) -> Ret`
- `impl<Ret, A, B, C, D, E, F, G, H, I, J> Clone for extern fn(A, B, C, D, E, F, G, H, I, J) -> Ret`
- `impl<Ret, A, B, C, D, E, F, G, H, I, J> Clone for unsafe fn(A, B, C, D, E, F, G, H, I, J) -> Ret`
- `impl<Ret, A, B, C, D, E, F, G, H, I, J> Clone for unsafe extern fn(A, B, C, D, E, F, G, H, I, J) -> Ret`
- `impl<Ret, A, B, C, D, E, F, G, H, I, J, K> Clone for fn(A, B, C, D, E, F, G, H, I, J, K) -> Ret`
- `impl<Ret, A, B, C, D, E, F, G, H, I, J, K> Clone for extern fn(A, B, C, D, E, F, G, H, I, J, K) -> Ret`
- `impl<Ret, A, B, C, D, E, F, G, H, I, J, K> Clone for unsafe fn(A, B, C, D, E, F, G, H, I, J, K) -> Ret`
- `impl<Ret, A, B, C, D, E, F, G, H, I, J, K> Clone for unsafe extern fn(A, B, C, D, E, F, G, H, I, J, K) -> Ret`
- `impl<Ret, A, B, C, D, E, F, G, H, I, J, K, L> Clone for fn(A, B, C, D, E, F, G, H, I, J, K, L) -> Ret`
- `impl<Ret, A, B, C, D, E, F, G, H, I, J, K, L> Clone for extern fn(A, B, C, D, E, F, G, H, I, J, K, L) -> Ret`
- `impl<Ret, A, B, C, D, E, F, G, H, I, J, K, L> Clone for unsafe fn(A, B, C, D, E, F, G, H, I, J, K, L) -> Ret`
- `impl<Ret, A, B, C, D, E, F, G, H, I, J, K, L> Clone for unsafe extern fn(A, B, C, D, E, F, G, H, I, J, K, L) -> Ret`
- `impl<T> Clone for Shared<T> where T: ?Sized`
- `impl<T> Clone for PhantomData<T> where T: ?Sized`
- `impl Clone for RangeFull`
- `impl<Idx> Clone for Range<Idx> where Idx: Clone`
- `impl<Idx> Clone for RangeFrom<Idx> where Idx: Clone`
- `impl<Idx> Clone for RangeTo<Idx> where Idx: Clone`
- `impl<Idx> Clone for RangeInclusive<Idx> where Idx: Clone`
- `impl<Idx> Clone for RangeToInclusive<Idx> where Idx: Clone`
- `impl Clone for Ordering`
- `impl<'a, T> Clone for &'a T where T: ?Sized`
- `impl Clone for isize`
- `impl Clone for i8`
- `impl Clone for i16`
- `impl Clone for i32`
- `impl Clone for i64`
- `impl Clone for usize`
- `impl Clone for u8`
- `impl Clone for u16`
- `impl Clone for u32`
- `impl Clone for u64`
- `impl Clone for f32`
- `impl Clone for f64`
- `impl Clone for ()`
- `impl Clone for bool`
- `impl Clone for char`
- `impl Clone for TypeId`
- `impl<T> Clone for [T; 0] where T: Copy`
- `impl<T> Clone for [T; 1] where T: Copy`
- `impl<T> Clone for [T; 2] where T: Copy`
- `impl<T> Clone for [T; 3] where T: Copy`
- `impl<T> Clone for [T; 4] where T: Copy`
- `impl<T> Clone for [T; 5] where T: Copy`
- `impl<T> Clone for [T; 6] where T: Copy`
- `impl<T> Clone for [T; 7] where T: Copy`
- `impl<T> Clone for [T; 8] where T: Copy`
- `impl<T> Clone for [T; 9] where T: Copy`
- `impl<T> Clone for [T; 10] where T: Copy`
- `impl<T> Clone for [T; 11] where T: Copy`
- `impl<T> Clone for [T; 12] where T: Copy`
- `impl<T> Clone for [T; 13] where T: Copy`
- `impl<T> Clone for [T; 14] where T: Copy`
- `impl<T> Clone for [T; 15] where T: Copy`
- `impl<T> Clone for [T; 16] where T: Copy`
- `impl<T> Clone for [T; 17] where T: Copy`
- `impl<T> Clone for [T; 18] where T: Copy`
- `impl<T> Clone for [T; 19] where T: Copy`
- `impl<T> Clone for [T; 20] where T: Copy`
- `impl<T> Clone for [T; 21] where T: Copy`
- `impl<T> Clone for [T; 22] where T: Copy`
- `impl<T> Clone for [T; 23] where T: Copy`
- `impl<T> Clone for [T; 24] where T: Copy`
- `impl<T> Clone for [T; 25] where T: Copy`
- `impl<T> Clone for [T; 26] where T: Copy`
- `impl<T> Clone for [T; 27] where T: Copy`
- `impl<T> Clone for [T; 28] where T: Copy`
- `impl<T> Clone for [T; 29] where T: Copy`
- `impl<T> Clone for [T; 30] where T: Copy`
- `impl<T> Clone for [T; 31] where T: Copy`
- `impl<T> Clone for [T; 32] where T: Copy`
- `impl Clone for Ordering`
- `impl<T> Clone for Cell<T> where T: Copy`
- `impl Clone for BorrowState`
- `impl<T> Clone for RefCell<T> where T: Clone`
- `impl Clone for EscapeUnicode`
- `impl Clone for EscapeDefault`
- `impl<A, R> Clone for StepBy<A, R> where A: Clone, R: Clone`
- `impl<A> Clone for Repeat<A> where A: Clone`
- `impl<T> Clone for Empty<T>`
- `impl<T> Clone for Once<T> where T: Clone`
- `impl<T> Clone for Rev<T> where T: Clone`
- `impl<I> Clone for Cloned<I> where I: Clone`
- `impl<I> Clone for Cycle<I> where I: Clone`
- `impl<A, B> Clone for Chain<A, B> where A: Clone, B: Clone`
- `impl<A, B> Clone for Zip<A, B> where A: Clone, B: Clone`
- `impl<I, F> Clone for Map<I, F> where F: Clone, I: Clone`
- `impl<I, P> Clone for Filter<I, P> where I: Clone, P: Clone`
- `impl<I, F> Clone for FilterMap<I, F> where F: Clone, I: Clone`
- `impl<I> Clone for Enumerate<I> where I: Clone`
- `impl<I> Clone for Peekable<I> where I: Clone + Iterator, I::Item: Clone`
- `impl<I, P> Clone for SkipWhile<I, P> where I: Clone, P: Clone`
- `impl<I, P> Clone for TakeWhile<I, P> where I: Clone, P: Clone`
- `impl<I> Clone for Skip<I> where I: Clone`
- `impl<I> Clone for Take<I> where I: Clone`
- `impl<I, St, F> Clone for Scan<I, St, F> where F: Clone, I: Clone, St: Clone`
- `impl<I, U, F> Clone for FlatMap<I, U, F> where F: Clone, I: Clone, U: Clone + IntoIterator, U::IntoIter: Clone`
- `impl<I> Clone for Fuse<I> where I: Clone`
- `impl<I, F> Clone for Inspect<I, F> where F: Clone, I: Clone`
- `impl<T> Clone for Option<T> where T: Clone`
- `impl<'a, A> Clone for Iter<'a, A>`
- `impl<A> Clone for IntoIter<A> where A: Clone`
- `impl<T> Clone for Slice<T>`
- `impl Clone for TraitObject`
- `impl<T, E> Clone for Result<T, E> where E: Clone, T: Clone`
- `impl<'a, T> Clone for Iter<'a, T>`
- `impl<'a, T> Clone for Iter<'a, T>`
- `impl<'a, T, P> Clone for Split<'a, T, P> where P: Clone + FnMut(&T) -> bool`
- `impl<'a, T> Clone for Windows<'a, T>`
- `impl<'a, T> Clone for Chunks<'a, T>`
- `impl Clone for SearchStep`
- `impl<'a> Clone for CharSearcher<'a>`
- `impl<'a, 'b> Clone for CharSliceSearcher<'a, 'b>`
- `impl<'a, F> Clone for CharPredicateSearcher<'a, F> where F: Clone + FnMut(char) -> bool`
- `impl<'a, 'b> Clone for StrSearcher<'a, 'b>`
- `impl Clone for ParseBoolError`
- `impl Clone for Utf8Error`
- `impl<'a> Clone for Chars<'a>`
- `impl<'a> Clone for CharIndices<'a>`
- `impl<'a> Clone for Bytes<'a>`
- `impl<'a, P> Clone for Split<'a, P> where P: Pattern<'a>, P::Searcher: Clone`
- `impl<'a, P> Clone for RSplit<'a, P> where P: Pattern<'a>, P::Searcher: Clone`
- `impl<'a, P> Clone for SplitTerminator<'a, P> where P: Pattern<'a>, P::Searcher: Clone`
- `impl<'a, P> Clone for RSplitTerminator<'a, P> where P: Pattern<'a>, P::Searcher: Clone`
- `impl<'a, P> Clone for SplitN<'a, P> where P: Pattern<'a>, P::Searcher: Clone`
- `impl<'a, P> Clone for RSplitN<'a, P> where P: Pattern<'a>, P::Searcher: Clone`
- `impl<'a, P> Clone for MatchIndices<'a, P> where P: Pattern<'a>, P::Searcher: Clone`
- `impl<'a, P> Clone for RMatchIndices<'a, P> where P: Pattern<'a>, P::Searcher: Clone`
- `impl<'a, P> Clone for Matches<'a, P> where P: Pattern<'a>, P::Searcher: Clone`
- `impl<'a, P> Clone for RMatches<'a, P> where P: Pattern<'a>, P::Searcher: Clone`
- `impl<'a> Clone for Lines<'a>`
- `impl<'a> Clone for LinesAny<'a>`
- `impl Clone for CharRange`
- `impl Clone for SipHasher`
- `impl<H> Clone for BuildHasherDefault<H>`
- `impl Clone for Error`
- `impl<'a> Clone for Arguments<'a>`
- `impl<A> Clone for (A,) where A: Clone`
- `impl<A, B> Clone for (A, B) where A: Clone, B: Clone`
- `impl<A, B, C> Clone for (A, B, C) where A: Clone, B: Clone, C: Clone`
- `impl<A, B, C, D> Clone for (A, B, C, D) where A: Clone, B: Clone, C: Clone, D: Clone`
- `impl<A, B, C, D, E> Clone for (A, B, C, D, E) where A: Clone, B: Clone, C: Clone, D: Clone, E: Clone`
- `impl<A, B, C, D, E, F> Clone for (A, B, C, D, E, F) where A: Clone, B: Clone, C: Clone, D: Clone, E: Clone, F: Clone`
- `impl<A, B, C, D, E, F, G> Clone for (A, B, C, D, E, F, G) where A: Clone, B: Clone, C: Clone, D: Clone, E: Clone, F: Clone, G: Clone`
- `impl<A, B, C, D, E, F, G, H> Clone for (A, B, C, D, E, F, G, H) where A: Clone, B: Clone, C: Clone, D: Clone, E: Clone, F: Clone, G: Clone, H: Clone`
- `impl<A, B, C, D, E, F, G, H, I> Clone for (A, B, C, D, E, F, G, H, I) where A: Clone, B: Clone, C: Clone, D: Clone, E: Clone, F: Clone, G: Clone, H: Clone, I: Clone`
- `impl<A, B, C, D, E, F, G, H, I, J> Clone for (A, B, C, D, E, F, G, H, I, J) where A: Clone, B: Clone, C: Clone, D: Clone, E: Clone, F: Clone, G: Clone, H: Clone, I: Clone, J: Clone`
- `impl<A, B, C, D, E, F, G, H, I, J, K> Clone for (A, B, C, D, E, F, G, H, I, J, K) where A: Clone, B: Clone, C: Clone, D: Clone, E: Clone, F: Clone, G: Clone, H: Clone, I: Clone, J: Clone, K: Clone`
- `impl<A, B, C, D, E, F, G, H, I, J, K, L> Clone for (A, B, C, D, E, F, G, H, I, J, K, L) where A: Clone, B: Clone, C: Clone, D: Clone, E: Clone, F: Clone, G: Clone, H: Clone, I: Clone, J: Clone, K: Clone, L: Clone`
- `impl Clone for ExchangeHeapSingleton`
- `impl<T> Clone for Box<T> where T: Clone`
- `impl Clone for Box<str>`
- `impl<T> Clone for Box<[T]> where T: Clone`
- `impl<T> Clone for Arc<T> where T: ?Sized`
- `impl<T> Clone for Weak<T> where T: ?Sized`
- `impl<T> Clone for Rc<T> where T: ?Sized`
- `impl<T> Clone for Weak<T> where T: ?Sized`
- `impl<T> Clone for BinaryHeap<T> where T: Clone`
- `impl<'a, T> Clone for Iter<'a, T>`
- `impl<T> Clone for IntoIter<T> where T: Clone`
- `impl<K, V> Clone for BTreeMap<K, V> where K: Clone, V: Clone`
- `impl<'a, K, V> Clone for Iter<'a, K, V>`
- `impl<'a, K, V> Clone for Keys<'a, K, V>`
- `impl<'a, K, V> Clone for Values<'a, K, V>`
- `impl<'a, K, V> Clone for Range<'a, K, V>`
- `impl<T> Clone for BTreeSet<T> where T: Clone`
- `impl<'a, T> Clone for Iter<'a, T>`
- `impl<'a, T> Clone for Range<'a, T>`
- `impl<'a, T> Clone for Difference<'a, T>`
- `impl<'a, T> Clone for SymmetricDifference<'a, T>`
- `impl<'a, T> Clone for Intersection<'a, T>`
- `impl<'a, T> Clone for Union<'a, T>`
- `impl<'a, B> Clone for Cow<'a, B> where B: ToOwned + ?Sized`
- `impl<E> Clone for EnumSet<E>`
- `impl<E> Clone for Iter<E>`
- `impl<'a, T> Clone for Iter<'a, T>`
- `impl<T> Clone for IntoIter<T> where T: Clone`
- `impl<A> Clone for LinkedList<A> where A: Clone`
- `impl<'a> Clone for EncodeUtf16<'a>`
- `impl Clone for String`
- `impl Clone for ParseError`
- `impl<T> Clone for Vec<T> where T: Clone`
- `impl<T> Clone for IntoIter<T> where T: Clone`
- `impl<T> Clone for VecDeque<T> where T: Clone`
- `impl<'a, T> Clone for Iter<'a, T>`
- `impl<T> Clone for IntoIter<T> where T: Clone`
- `impl<T> Clone for Bound<T> where T: Clone`
- `impl<I> Clone for Utf16Encoder<I> where I: Clone`
- `impl<I> Clone for DecodeUtf16<I> where I: Clone + Iterator<Item=u16>`
- `impl Clone for DecodeUtf16Error`
- `impl Clone for LocalKeyState`
- `impl Clone for Thread`
- `impl<K: Clone, V: Clone, S: Clone> Clone for HashMap<K, V, S>`
- `impl<'a, K, V> Clone for Iter<'a, K, V>`
- `impl<'a, K, V> Clone for Keys<'a, K, V>`
- `impl<'a, K, V> Clone for Values<'a, K, V>`
- `impl Clone for RandomState`
- `impl<T: Clone, S: Clone> Clone for HashSet<T, S>`
- `impl<'a, K> Clone for Iter<'a, K>`
- `impl<'a, T, S> Clone for Intersection<'a, T, S>`
- `impl<'a, T, S> Clone for Difference<'a, T, S>`
- `impl<'a, T, S> Clone for SymmetricDifference<'a, T, S>`
- `impl<'a, T, S> Clone for Union<'a, T, S>`
- `impl Clone for VarError`
- `impl Clone for CString`
- `impl Clone for NulError`
- `impl Clone for IntoStringError`
- `impl Clone for OsString`
- `impl Clone for Metadata`
- `impl Clone for OpenOptions`
- `impl Clone for Permissions`
- `impl Clone for FileType`
- `impl<T: Clone> Clone for Cursor<T>`
- `impl Clone for ErrorKind`
- `impl Clone for SeekFrom`
- `impl Clone for IpAddr`
- `impl Clone for Ipv6MulticastScope`
- `impl Clone for Ipv4Addr`
- `impl Clone for Ipv6Addr`
- `impl Clone for SocketAddr`
- `impl Clone for SocketAddrV4`
- `impl Clone for SocketAddrV6`
- `impl Clone for AddrParseError`
- `impl Clone for Shutdown`
- `impl Clone for SocketAddr`
- `impl Clone for stat`
- `impl<'a> Clone for Prefix<'a>`
- `impl<'a> Clone for PrefixComponent<'a>`
- `impl<'a> Clone for Component<'a>`
- `impl<'a> Clone for Components<'a>`
- `impl<'a> Clone for Iter<'a>`
- `impl Clone for PathBuf`
- `impl Clone for StripPrefixError`
- `impl Clone for Output`
- `impl Clone for ExitStatus`
- `impl<T: Clone> Clone for SendError<T>`
- `impl Clone for RecvError`
- `impl Clone for TryRecvError`
- `impl<T: Clone> Clone for TrySendError<T>`
- `impl<T> Clone for Sender<T>`
- `impl<T> Clone for SyncSender<T>`
- `impl Clone for WaitTimeoutResult`
- `impl Clone for Duration`
- `impl Clone for Instant`
- `impl Clone for SystemTime`
- `impl Clone for SystemTimeError`
- `impl Clone for StandardNormal`
- `impl Clone for Normal`
- `impl Clone for LogNormal`
- `impl Clone for Exp1`
- `impl Clone for Exp`
- `impl Clone for IsaacRng`
- `impl Clone for Isaac64Rng`
- `impl Clone for ChaChaRng`
- `impl Clone for ReseedWithDefault`
- `impl Clone for XorShiftRng`
- `impl Clone for ThreadRng`

# Help

## Keyboard Shortcuts

?
  Show this help dialog
S
  Focus the search field
⇤
  Move up in search results
⇥
  Move down in search results
⏎
  Go to active search result

## Search Tricks

Prefix searches with a type followed by a colon (e.g. `fn:`) to restrict the search to a given type.

Accepted types are: `fn`, `mod`, `struct`, `enum`, `trait`, `type`, `macro`, and `const`.

Search functions by type signature (e.g. `vec -> usize` or `* -> vec`)