pub trait Clone {
const fn clone(&self) -> Self;
const fn clone_from(&mut self, source: &Self) { ... }
}
Expand description
A common trait for the ability to explicitly duplicate an object.
Differs from Copy
in that Copy
is implicit and an inexpensive bit-wise copy, 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 derive
d
implementation of Clone
calls clone
on each field.
For a generic struct, #[derive]
implements Clone
conditionally by adding bound Clone
on
generic parameters.
// `derive` implements Clone for Reading<T> when T is Clone.
#[derive(Clone)]
struct Reading<T> {
frequency: T,
}
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 a generic struct holding a function pointer. In this case, the
implementation of Clone
cannot be derive
d, but can be implemented as:
struct Generate<T>(fn() -> T);
impl<T> Copy for Generate<T> {}
impl<T> Clone for Generate<T> {
fn clone(&self) -> Self {
*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
) - 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 implementClone
(even if the referent doesn’t), while variables captured by mutable reference never implementClone
.
Required Methods
Provided Methods
sourceconst fn clone_from(&mut self, source: &Self)
const 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 Clone for hashbrown_tstd::TryReserveError
impl Clone for PolledOk
impl Clone for OCallError
impl Clone for AddressKind
impl Clone for SockAddr
impl Clone for DIR
impl Clone for MapAddr
impl Clone for FutexClockId
impl Clone for FutexOp
impl Clone for PageType
impl Clone for Feature
impl Clone for Version
impl Clone for ExceptionType
impl Clone for ExceptionVector
impl Clone for HandleResult
impl Clone for PceError
impl Clone for QcnlError
impl Clone for Quote3Error
impl Clone for SgxStatus
impl Clone for DirIndex
impl Clone for EcResult
impl Clone for RsaKeyType
impl Clone for RsaResult
impl Clone for PckCertFlag
impl Clone for ProdType
impl Clone for QeType
impl Clone for QlAttestationAlgorithmId
impl Clone for QlCertKeyType
impl Clone for QlConfigVersion
impl Clone for QlLogLevel
impl Clone for QlPathType
impl Clone for QlQvResult
impl Clone for QlRequestPolicy
impl Clone for QvPathType
impl Clone for DhSessionRole
impl Clone for EnclaveMode
impl Clone for KeyName
impl Clone for ProtectPerm
impl Clone for RaKeyType
impl Clone for QuoteSignType
impl Clone for SwitchlessWokerEvent
impl Clone for SwitchlessWokerType
impl Clone for SgxDeviceStatus
impl Clone for sgx_tstd::cmp::Ordering
impl Clone for TryReserveErrorKind
impl Clone for Infallible
impl Clone for VarError
impl Clone for sgx_tstd::fmt::Alignment
impl Clone for ErrorKind
impl Clone for SeekFrom
impl Clone for IpAddr
impl Clone for Ipv6MulticastScope
impl Clone for Shutdown
impl Clone for SocketAddr
impl Clone for FpCategory
impl Clone for IntErrorKind
impl Clone for SearchStep
impl Clone for sgx_tstd::sync::atomic::Ordering
impl Clone for TcsPolicy
impl Clone for Which
impl Clone for bool
impl Clone for char
impl Clone for f32
impl Clone for f64
impl Clone for i8
impl Clone for i16
impl Clone for i32
impl Clone for i64
impl Clone for i128
impl Clone for isize
impl Clone for !
impl Clone for u8
impl Clone for u16
impl Clone for u32
impl Clone for u64
impl Clone for u128
impl Clone for usize
impl Clone for AlighAllocErr
impl Clone for AlignLayout
impl Clone for AlignLayoutErr
impl Clone for AlignReq
impl Clone for addr_info
impl Clone for sgx_oc::linux::ocall::cpuid::CpuidResult
impl Clone for AddrInfo
impl Clone for AddrInfoHints
impl Clone for MsgHdrFlags
impl Clone for addrinfo
impl Clone for cmsghdr
impl Clone for cpu_set_t
impl Clone for dirent64
impl Clone for dirent
impl Clone for epoll_event
impl Clone for fd_set
impl Clone for hostent
impl Clone for in6_addr
impl Clone for in_addr
impl Clone for iovec
impl Clone for ip_mreq
impl Clone for ipv6_mreq
impl Clone for linger
impl Clone for msghdr
impl Clone for passwd
impl Clone for pollfd
impl Clone for sigaction
impl Clone for siginfo_t
impl Clone for sigset_t
impl Clone for sigval
impl Clone for sockaddr
impl Clone for sockaddr_in6
impl Clone for sockaddr_in
impl Clone for sockaddr_ll
impl Clone for sockaddr_nl
impl Clone for sockaddr_storage
impl Clone for sockaddr_un
impl Clone for stat64
impl Clone for sgx_oc::linux::x86_64::stat
impl Clone for timeval
impl Clone for tm
impl Clone for ucred
impl Clone for utsname
impl Clone for winsize
impl Clone for RsrvMemAllocErr
impl Clone for Nothing
impl Clone for Zero
impl Clone for FutexFlags
impl Clone for Timespec
impl Clone for PageFlags
impl Clone for PageInfo
impl Clone for PageRange
impl Clone for AlignKeyRequest
impl Clone for AlignReport2Mac
impl Clone for AlignReport
impl Clone for AlignReportData
impl Clone for AlignTargetInfo
impl Clone for TcsId
impl Clone for CpuContext
impl Clone for ExceptionInfo
impl Clone for Handle
impl Clone for CssBody
impl Clone for CssBuffer
impl Clone for CssHeader
impl Clone for CssKey
impl Clone for DataDir
impl Clone for ElRangeConfig
impl Clone for EnclaveCss
impl Clone for MetaData
impl Clone for AlignEc256PrivateKey
impl Clone for AlignKey128bit
impl Clone for AlignKey256bit
impl Clone for AlignMac128bit
impl Clone for AlignMac256bit
impl Clone for Ec256PrivateKey
impl Clone for Ec256PublicKey
impl Clone for Ec256Signature
impl Clone for Rsa2048Key
impl Clone for Rsa2048Param
impl Clone for Rsa2048PrivKey
impl Clone for Rsa2048PubKey
impl Clone for Rsa2048Signature
impl Clone for Rsa3072Key
impl Clone for Rsa3072Param
impl Clone for Rsa3072PrivKey
impl Clone for Rsa3072PubKey
impl Clone for Rsa3072Signature
impl Clone for Sha1Hash
impl Clone for Sha256Hash
impl Clone for Sha384Hash
impl Clone for Sm3Hash
impl Clone for PceInfo
impl Clone for QlAuthData
impl Clone for QlCertificationData
impl Clone for QlEcdsaSigData
impl Clone for QlPPIDRsa3072EncryptedCertInfo
impl Clone for QlQe3Id
impl Clone for QlQeReportInfo
impl Clone for QlQvSupplemental
impl Clone for QlQveCollateralParam
impl Clone for Quote3
impl Clone for QuoteHeader
impl Clone for CDhMsg1
impl Clone for CDhMsg2
impl Clone for CDhMsg3
impl Clone for CDhMsg3Body
impl Clone for CDhSession
impl Clone for CEnclaveIdentity
impl Clone for CRaMsg1
impl Clone for CRaMsg2
impl Clone for CRaMsg3
impl Clone for PsSecPropDesc
impl Clone for AttKeyId
impl Clone for AttKeyIdExt
impl Clone for BaseName
impl Clone for PlatformInfo
impl Clone for QeReportInfo
impl Clone for QlAttKeyId
impl Clone for Quote
impl Clone for QuoteNonce
impl Clone for Spid
impl Clone for UpdateInfoBit
impl Clone for CDcapMRaMsg2
impl Clone for CDcapRaMsg1
impl Clone for CDcapRaMsg3
impl Clone for CDcapURaMsg2
impl Clone for EnclaveIdentity
impl Clone for timespec
impl Clone for Report2
impl Clone for Report2Mac
impl Clone for TeeAttributes
impl Clone for TeeCpuSvn
impl Clone for TeeMeasurement
impl Clone for TeeReportData
impl Clone for TeeReportType
impl Clone for CAesGcmData
impl Clone for CSealedData
impl Clone for Attributes
impl Clone for AttributesFlags
impl Clone for ConfigId
impl Clone for CpuSvn
impl Clone for KeyId
impl Clone for KeyPolicy
impl Clone for KeyRequest
impl Clone for Measurement
impl Clone for MiscAttribute
impl Clone for MiscSelect
impl Clone for Report
impl Clone for ReportBody
impl Clone for ReportData
impl Clone for TargetInfo
impl Clone for SwitchlessConfig
impl Clone for SwitchlessWokerStats
impl Clone for EcdsaSigDataV4
impl Clone for QeReportCertificationData
impl Clone for Quote4
impl Clone for Quote4Header
impl Clone for Report2Body
impl Clone for TeeInfo
impl Clone for TeeTcbInfo
impl Clone for TeeTcbSvn
impl Clone for KssConfig
impl Clone for AllocError
impl Clone for Global
impl Clone for Layout
impl Clone for LayoutError
impl Clone for TypeId
impl Clone for TryFromSliceError
impl Clone for sgx_tstd::ascii::EscapeDefault
impl Clone for Box<str, Global>
impl Clone for Box<CStr, Global>
impl Clone for Box<OsStr>
impl Clone for Box<Path>
impl Clone for CharTryFromError
impl Clone for DecodeUtf16Error
impl Clone for sgx_tstd::char::EscapeDebug
impl Clone for sgx_tstd::char::EscapeDefault
impl Clone for sgx_tstd::char::EscapeUnicode
impl Clone for ParseCharError
impl Clone for ToLowercase
impl Clone for ToUppercase
impl Clone for TryFromCharError
impl Clone for DefaultHasher
impl Clone for RandomState
impl Clone for sgx_tstd::collections::TryReserveError
impl Clone for CString
impl Clone for FromBytesWithNulError
impl Clone for FromVecWithNulError
impl Clone for IntoStringError
impl Clone for NulError
impl Clone for OsString
impl Clone for Error
impl Clone for SipHasher
impl Clone for sgx_tstd::io::Empty
impl Clone for Sink
impl Clone for PhantomPinned
impl Clone for Assume
impl Clone for AddrParseError
impl Clone for Ipv4Addr
impl Clone for Ipv6Addr
impl Clone for SocketAddrV4
impl Clone for SocketAddrV6
impl Clone for NonZeroI8
impl Clone for NonZeroI16
impl Clone for NonZeroI32
impl Clone for NonZeroI64
impl Clone for NonZeroI128
impl Clone for NonZeroIsize
impl Clone for NonZeroU8
impl Clone for NonZeroU16
impl Clone for NonZeroU32
impl Clone for NonZeroU64
impl Clone for NonZeroU128
impl Clone for NonZeroUsize
impl Clone for ParseFloatError
impl Clone for ParseIntError
impl Clone for TryFromIntError
impl Clone for RangeFull
impl Clone for sgx_tstd::os::linux::raw::stat
impl Clone for PathBuf
impl Clone for StripPrefixError
impl Clone for sgx_tstd::ptr::Alignment
impl Clone for ParseBoolError
impl Clone for Utf8Error
impl Clone for FromUtf8Error
impl Clone for String
impl Clone for WaitTimeoutResult
impl Clone for RawWakerVTable
impl Clone for Waker
impl Clone for Thread
impl Clone for ThreadId
impl Clone for Duration
impl Clone for FromFloatSecsError
impl Clone for Instant
impl Clone for SystemTime
impl Clone for SystemTimeError
impl Clone for FileTimes
impl Clone for FileType
impl Clone for Metadata
impl Clone for OpenOptions
impl Clone for Permissions
impl Clone for core::core_arch::x86::cpuid::CpuidResult
impl Clone for __m128
impl Clone for __m128bh
impl Clone for __m128d
impl Clone for __m128i
impl Clone for __m256
impl Clone for __m256bh
impl Clone for __m256d
impl Clone for __m256i
impl Clone for __m512
impl Clone for __m512bh
impl Clone for __m512d
impl Clone for __m512i
impl Clone for FromBytesUntilNulError
impl Clone for _Unwind_Action
impl Clone for _Unwind_Reason_Code
impl<'a> Clone for Component<'a>
impl<'a> Clone for Prefix<'a>
impl<'a> Clone for Arguments<'a>
impl<'a> Clone for IoSlice<'a>
impl<'a> Clone for Location<'a>
impl<'a> Clone for Ancestors<'a>
impl<'a> Clone for Components<'a>
impl<'a> Clone for sgx_tstd::path::Iter<'a>
impl<'a> Clone for PrefixComponent<'a>
impl<'a> Clone for EscapeAscii<'a>
impl<'a> Clone for CharSearcher<'a>
impl<'a> Clone for Bytes<'a>
impl<'a> Clone for CharIndices<'a>
impl<'a> Clone for Chars<'a>
impl<'a> Clone for EncodeUtf16<'a>
impl<'a> Clone for sgx_tstd::str::EscapeDebug<'a>
impl<'a> Clone for sgx_tstd::str::EscapeDefault<'a>
impl<'a> Clone for sgx_tstd::str::EscapeUnicode<'a>
impl<'a> Clone for Lines<'a>
impl<'a> Clone for LinesAny<'a>
impl<'a> Clone for SplitAsciiWhitespace<'a>
impl<'a> Clone for SplitWhitespace<'a>
impl<'a> Clone for Utf8Chunk<'a>
impl<'a> Clone for Utf8Chunks<'a>
impl<'a> Clone for Source<'a>
impl<'a, 'b> Clone for CharSliceSearcher<'a, 'b>
impl<'a, 'b> Clone for StrSearcher<'a, 'b>
impl<'a, 'b, const N: usize> Clone for CharArrayRefSearcher<'a, 'b, N>
impl<'a, F> Clone for CharPredicateSearcher<'a, F>where
F: Clone + FnMut(char) -> bool,
impl<'a, P> Clone for MatchIndices<'a, P>where
P: Pattern<'a>,
<P as Pattern<'a>>::Searcher: Clone,
impl<'a, P> Clone for Matches<'a, P>where
P: Pattern<'a>,
<P as Pattern<'a>>::Searcher: Clone,
impl<'a, P> Clone for RMatchIndices<'a, P>where
P: Pattern<'a>,
<P as Pattern<'a>>::Searcher: Clone,
impl<'a, P> Clone for RMatches<'a, P>where
P: Pattern<'a>,
<P as Pattern<'a>>::Searcher: Clone,
impl<'a, P> Clone for sgx_tstd::str::RSplit<'a, P>where
P: Pattern<'a>,
<P as Pattern<'a>>::Searcher: Clone,
impl<'a, P> Clone for RSplitN<'a, P>where
P: Pattern<'a>,
<P as Pattern<'a>>::Searcher: Clone,
impl<'a, P> Clone for RSplitTerminator<'a, P>where
P: Pattern<'a>,
<P as Pattern<'a>>::Searcher: Clone,
impl<'a, P> Clone for sgx_tstd::str::Split<'a, P>where
P: Pattern<'a>,
<P as Pattern<'a>>::Searcher: Clone,
impl<'a, P> Clone for sgx_tstd::str::SplitInclusive<'a, P>where
P: Pattern<'a>,
<P as Pattern<'a>>::Searcher: Clone,
impl<'a, P> Clone for SplitN<'a, P>where
P: Pattern<'a>,
<P as Pattern<'a>>::Searcher: Clone,
impl<'a, P> Clone for SplitTerminator<'a, P>where
P: Pattern<'a>,
<P as Pattern<'a>>::Searcher: Clone,
impl<'a, T> Clone for RChunksExact<'a, T>
impl<'a, T, const N: usize> Clone for ArrayWindows<'a, T, N>where
T: 'a + Clone,
impl<'a, const N: usize> Clone for CharArraySearcher<'a, N>
impl<'f> Clone for VaListImpl<'f>
impl<'fd> Clone for BorrowedFd<'fd>
impl<A> Clone for Repeat<A>where
A: Clone,
impl<A> Clone for sgx_tstd::option::IntoIter<A>where
A: Clone,
impl<A> Clone for sgx_tstd::option::Iter<'_, A>
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<B> Clone for Cow<'_, B>where
B: ToOwned + ?Sized,
impl<B, C> Clone for ControlFlow<B, C>where
B: Clone,
C: Clone,
impl<Dyn> Clone for DynMetadata<Dyn>where
Dyn: ?Sized,
impl<F> Clone for FromFn<F>where
F: Clone,
impl<F> Clone for OnceWith<F>where
F: Clone,
impl<F> Clone for RepeatWith<F>where
F: Clone,
impl<H> Clone for BuildHasherDefault<H>
impl<I> Clone for FromIter<I>where
I: Clone,
impl<I> Clone for DecodeUtf16<I>where
I: Clone + Iterator<Item = u16>,
impl<I> Clone for Cloned<I>where
I: Clone,
impl<I> Clone for Copied<I>where
I: Clone,
impl<I> Clone for Cycle<I>where
I: Clone,
impl<I> Clone for Enumerate<I>where
I: Clone,
impl<I> Clone for Fuse<I>where
I: Clone,
impl<I> Clone for Intersperse<I>where
I: Clone + Iterator,
<I as Iterator>::Item: Clone,
impl<I> Clone for Peekable<I>where
I: Clone + Iterator,
<I as Iterator>::Item: Clone,
impl<I> Clone for Skip<I>where
I: Clone,
impl<I> Clone for StepBy<I>where
I: Clone,
impl<I> Clone for Take<I>where
I: Clone,
impl<I, F> Clone for FilterMap<I, F>where
I: Clone,
F: Clone,
impl<I, F> Clone for Inspect<I, F>where
I: Clone,
F: Clone,
impl<I, F> Clone for Map<I, F>where
I: Clone,
F: Clone,
impl<I, G> Clone for IntersperseWith<I, G>where
I: Iterator + Clone,
<I as Iterator>::Item: Clone,
G: Clone,
impl<I, P> Clone for Filter<I, P>where
I: Clone,
P: Clone,
impl<I, P> Clone for MapWhile<I, P>where
I: Clone,
P: 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, St, F> Clone for Scan<I, St, F>where
I: Clone,
St: Clone,
F: Clone,
impl<I, U> Clone for Flatten<I>where
I: Clone + Iterator,
<I as Iterator>::Item: IntoIterator<IntoIter = U, Item = <U as Iterator>::Item>,
U: Clone + Iterator,
impl<I, U, F> Clone for FlatMap<I, U, F>where
I: Clone,
F: Clone,
U: Clone + IntoIterator,
<U as IntoIterator>::IntoIter: Clone,
impl<I, const N: usize> Clone for sgx_tstd::iter::ArrayChunks<I, N>where
I: Clone + Iterator,
<I as Iterator>::Item: Clone,
impl<Idx> Clone for sgx_tstd::ops::Range<Idx>where
Idx: Clone,
impl<Idx> Clone for RangeFrom<Idx>where
Idx: Clone,
impl<Idx> Clone for RangeInclusive<Idx>where
Idx: Clone,
impl<Idx> Clone for RangeTo<Idx>where
Idx: Clone,
impl<Idx> Clone for RangeToInclusive<Idx>where
Idx: Clone,
impl<K> Clone for hashbrown_tstd::set::Iter<'_, K>
impl<K> Clone for sgx_tstd::collections::hash_set::Iter<'_, K>
impl<K, V> Clone for hashbrown_tstd::map::Iter<'_, K, V>
impl<K, V> Clone for hashbrown_tstd::map::Keys<'_, K, V>
impl<K, V> Clone for hashbrown_tstd::map::Values<'_, K, V>
impl<K, V> Clone for sgx_tstd::collections::btree_map::Iter<'_, K, V>
impl<K, V> Clone for sgx_tstd::collections::btree_map::Keys<'_, K, V>
impl<K, V> Clone for sgx_tstd::collections::btree_map::Range<'_, K, V>
impl<K, V> Clone for sgx_tstd::collections::btree_map::Values<'_, K, V>
impl<K, V> Clone for sgx_tstd::collections::hash_map::Iter<'_, K, V>
impl<K, V> Clone for sgx_tstd::collections::hash_map::Keys<'_, K, V>
impl<K, V> Clone for sgx_tstd::collections::hash_map::Values<'_, K, V>
impl<K, V, A> Clone for BTreeMap<K, V, A>where
K: Clone,
V: Clone,
A: Allocator + Clone,
impl<K, V, S> Clone for sgx_tstd::collections::hash_map::HashMap<K, V, S>where
K: Clone,
V: Clone,
S: Clone,
impl<K, V, S, A> Clone for hashbrown_tstd::map::HashMap<K, V, S, A>where
K: Clone,
V: Clone,
S: Clone,
A: Allocator + Clone,
impl<P> Clone for Pin<P>where
P: Clone,
impl<T> !Clone for &mut Twhere
T: ?Sized,
Shared references can be cloned, but mutable references cannot!
impl<T> Clone for Bound<T>where
T: Clone,
impl<T> Clone for Option<T>where
T: Clone,
impl<T> Clone for Poll<T>where
T: Clone,
impl<T> Clone for *const Twhere
T: ?Sized,
impl<T> Clone for *mut Twhere
T: ?Sized,
impl<T> Clone for &Twhere
T: ?Sized,
Shared references can be cloned, but mutable references cannot!