Trait cretonne::prelude::codegen::entity::__core::prelude::v1::Clone1.0.0[][src]

#[lang = "clone"]
pub trait Clone { fn clone(&self) -> Self; fn clone_from(&mut self, source: &Self) { ... } }

A common trait for the ability to explicitly duplicate an object.

Differs from Copy in that Copy is implicit and extremely inexpensive, while Clone is always explicit and may or may not be expensive. In order to enforce these characteristics, Rust does not allow you to reimplement Copy, but you may reimplement Clone and run arbitrary code.

Since Clone is more general than Copy, you can automatically make anything Copy be Clone as well.

Derivable

This trait can be used with #[derive] if all fields are Clone. The derived implementation of clone calls clone on each field.

How can I implement Clone?

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.

An example is an array holding more than 32 elements of a type that is Clone; the standard library only implements Clone up until arrays of size 32. In this case, the implementation of Clone cannot be derived, but can be implemented as:

#[derive(Copy)]
struct Stats {
   frequencies: [i32; 100],
}

impl Clone for Stats {
    fn clone(&self) -> Stats { *self }
}

Additional implementors

In addition to the implementors listed below, the following types also implement Clone:

  • Function item types (i.e. the distinct types defined for each function)
  • Function pointer types (e.g. fn() -> i32)
  • Array types, for all sizes, if the item type also implements Clone (e.g. [i32; 123456])
  • Tuple types, if each component also implements Clone (e.g. (), (i32, bool))
  • Closure types, if they capture no value from the environment or if all such captured values implement Clone themselves. Note that variables captured by shared reference always implement Clone (even if the referent doesn't), while variables captured by mutable reference never implement Clone.

Required Methods

Returns a copy of the value.

Examples

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

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

Provided Methods

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.

Implementations on Foreign Types

impl<'a, T, S> Clone for Union<'a, T, S>
[src]

Important traits for Union<'a, T, S>

impl Clone for SocketAddrV4
[src]

impl<T> Clone for SendError<T> where
    T: Clone
[src]

impl<'a> Clone for PrefixComponent<'a>
[src]

impl<'a> Clone for Prefix<'a>
[src]

impl<'a, T, S> Clone for SymmetricDifference<'a, T, S>
[src]

Important traits for SymmetricDifference<'a, T, S>

impl Clone for ExitCode
[src]

impl Clone for IntoStringError
[src]

impl<T> Clone for Cursor<T> where
    T: Clone
[src]

Important traits for Cursor<T>

impl Clone for Permissions
[src]

impl Clone for ThreadId
[src]

impl Clone for Ipv6MulticastScope
[src]

impl<T> Clone for SyncSender<T>
[src]

impl Clone for NulError
[src]

impl Clone for RecvError
[src]

impl<'a, K> Clone for Iter<'a, K>
[src]

Important traits for Iter<'a, K>

impl Clone for OpenOptions
[src]

impl Clone for Ipv6Addr
[src]

impl<'a> Clone for Component<'a>
[src]

impl Clone for Ipv4Addr
[src]

impl<T, S> Clone for HashSet<T, S> where
    S: Clone,
    T: Clone
[src]

impl<'a, T, S> Clone for Difference<'a, T, S>
[src]

Important traits for Difference<'a, T, S>

impl<T> Clone for TrySendError<T> where
    T: Clone
[src]

impl Clone for SystemTime
[src]

impl Clone for SocketAddrV6
[src]

impl<'a, K, V> Clone for Values<'a, K, V>
[src]

Important traits for Values<'a, K, V>

impl<'a> Clone for Ancestors<'a>
[src]

Important traits for Ancestors<'a>

impl Clone for Metadata
[src]

impl Clone for ExitStatus
[src]

impl Clone for AddrParseError
[src]

impl<'a, K, V> Clone for Keys<'a, K, V>
[src]

Important traits for Keys<'a, K, V>

impl Clone for WaitTimeoutResult
[src]

impl Clone for ErrorKind
[src]

impl<K, V, S> Clone for HashMap<K, V, S> where
    K: Clone,
    S: Clone,
    V: Clone
[src]

impl Clone for StripPrefixError
[src]

impl<'a, K, V> Clone for Iter<'a, K, V>
[src]

Important traits for Iter<'a, K, V>

impl Clone for CString
[src]

impl Clone for FromBytesWithNulError
[src]

impl Clone for PathBuf
[src]

impl Clone for Output
[src]

impl<T> Clone for Sender<T>
[src]

impl<'a> Clone for EncodeWide<'a>
[src]

Important traits for EncodeWide<'a>

impl Clone for Thread
[src]

impl Clone for SeekFrom
[src]

impl Clone for OsString
[src]

impl Clone for SystemTimeError
[src]

impl Clone for SocketAddr
[src]

impl Clone for RecvTimeoutError
[src]

impl<'a, T, S> Clone for Intersection<'a, T, S>
[src]

Important traits for Intersection<'a, T, S>

impl Clone for Instant
[src]

impl Clone for RandomState
[src]

impl Clone for VarError
[src]

impl<'a> Clone for Iter<'a>
[src]

Important traits for Iter<'a>

impl Clone for IpAddr
[src]

impl Clone for TryRecvError
[src]

impl Clone for DefaultHasher
[src]

impl<'a> Clone for Components<'a>
[src]

Important traits for Components<'a>

impl Clone for FileType
[src]

impl Clone for Shutdown
[src]

impl Clone for i8
[src]

impl<'a, T> Clone for &'a T where
    T: ?Sized
[src]

Important traits for &'a mut R

impl Clone for f64
[src]

impl<T> Clone for *mut T where
    T: ?Sized
[src]

impl Clone for char
[src]

impl Clone for i128
[src]

impl Clone for u32
[src]

impl<T> Clone for *const T where
    T: ?Sized
[src]

impl Clone for !
[src]

impl Clone for u128
[src]

impl Clone for u16
[src]

impl Clone for u64
[src]

impl Clone for isize
[src]

impl Clone for i16
[src]

impl Clone for usize
[src]

impl Clone for u8
[src]

impl Clone for i64
[src]

impl Clone for ParseFloatError
[src]

impl Clone for bool
[src]

impl Clone for i32
[src]

impl Clone for f32
[src]

impl<T> Clone for IntoIter<T> where
    T: Clone
[src]

Important traits for IntoIter<T>

impl<'a, T> Clone for Intersection<'a, T>
[src]

Important traits for Intersection<'a, T>

impl<'a, T> Clone for Iter<'a, T>
[src]

Important traits for Iter<'a, T>

impl Clone for Global
[src]

impl<'a, B> Clone for Cow<'a, B> where
    B: ToOwned + ?Sized
[src]

impl<T> Clone for Vec<T> where
    T: Clone
[src]

Important traits for Vec<u8>

impl<T> Clone for Weak<T> where
    T: ?Sized
[src]

Makes a clone of the Weak pointer that points to the same value.

Examples

use std::sync::{Arc, Weak};

let weak_five = Arc::downgrade(&Arc::new(5));

Weak::clone(&weak_five);

impl<'a, T> Clone for SymmetricDifference<'a, T>
[src]

Important traits for SymmetricDifference<'a, T>

impl Clone for Box<str>
[src]

Important traits for Box<R>

impl<'a, T> Clone for Iter<'a, T>
[src]

Important traits for Iter<'a, T>

impl<T> Clone for Weak<T> where
    T: ?Sized
[src]

Makes a clone of the Weak pointer that points to the same value.

Examples

use std::rc::{Rc, Weak};

let weak_five = Rc::downgrade(&Rc::new(5));

Weak::clone(&weak_five);

impl<'a, T> Clone for Iter<'a, T>
[src]

Important traits for Iter<'a, T>

impl<'a, K, V> Clone for Range<'a, K, V>
[src]

Important traits for Range<'a, K, V>

impl<T> Clone for BinaryHeap<T> where
    T: Clone
[src]

impl<T> Clone for VecDeque<T> where
    T: Clone
[src]

impl<'a, T> Clone for Union<'a, T>
[src]

Important traits for Union<'a, T>

impl<'a, K, V> Clone for Keys<'a, K, V>
[src]

Important traits for Keys<'a, K, V>

impl<T> Clone for IntoIter<T> where
    T: Clone
[src]

Important traits for IntoIter<T>

impl<T> Clone for Arc<T> where
    T: ?Sized
[src]

Makes a clone of the Arc pointer.

This creates another pointer to the same inner value, increasing the strong reference count.

Examples

use std::sync::Arc;

let five = Arc::new(5);

Arc::clone(&five);

impl<T> Clone for Box<T> where
    T: Clone
[src]

Important traits for Box<R>

Returns a new box with a clone() of this box's contents.

Examples

let x = Box::new(5);
let y = x.clone();

Copies source's contents into self without creating a new allocation.

Examples

let x = Box::new(5);
let mut y = Box::new(10);

y.clone_from(&x);

assert_eq!(*y, 5);

impl Clone for ParseError
[src]

impl<K, V> Clone for BTreeMap<K, V> where
    K: Clone,
    V: Clone
[src]

impl<'a, T> Clone for Iter<'a, T>
[src]

Important traits for Iter<'a, T>

impl<'a, K, V> Clone for Values<'a, K, V>
[src]

Important traits for Values<'a, K, V>

impl<T> Clone for Rc<T> where
    T: ?Sized
[src]

Makes a clone of the Rc pointer.

This creates another pointer to the same inner value, increasing the strong reference count.

Examples

use std::rc::Rc;

let five = Rc::new(5);

Rc::clone(&five);

impl<T> Clone for BTreeSet<T> where
    T: Clone
[src]

impl Clone for String
[src]

impl<'a, K, V> Clone for Iter<'a, K, V>
[src]

Important traits for Iter<'a, K, V>

impl<T> Clone for IntoIter<T> where
    T: Clone
[src]

Important traits for IntoIter<T>

impl<'a, T> Clone for Range<'a, T>
[src]

Important traits for Range<'a, T>

impl<'a, T> Clone for Difference<'a, T>
[src]

Important traits for Difference<'a, T>

impl<T> Clone for LinkedList<T> where
    T: Clone
[src]

impl<T> Clone for IntoIter<T> where
    T: Clone
[src]

Important traits for IntoIter<T>

impl<T> Clone for Box<[T]> where
    T: Clone
[src]

Important traits for Box<R>

impl Clone for timespec
[src]

impl Clone for tm
[src]

impl Clone for utimbuf
[src]

impl Clone for timeval
[src]

impl Clone for stat
[src]

impl<E> Clone for Compat<E> where
    E: Clone

impl Clone for Endianness

impl Clone for ParseError

impl Clone for Environment

impl Clone for BinaryFormat

impl Clone for Vendor

impl Clone for Triple

impl Clone for Architecture

impl Clone for OperatingSystem

impl Clone for PointerWidth

Implementors