Improve Clone doc
This commit is contained in:
parent
3344f893a8
commit
3d289278ee
@ -14,10 +14,14 @@
|
||||
//! assign them or pass them as arguments, the receiver will get a copy,
|
||||
//! leaving the original value in place. These types do not require
|
||||
//! allocation to copy and do not have finalizers (i.e. they do not
|
||||
//! contain owned boxes or implement `Drop`), so the compiler considers
|
||||
//! contain owned boxes or implement [`Drop`]), so the compiler considers
|
||||
//! them cheap and safe to copy. For other types copies must be made
|
||||
//! explicitly, by convention implementing the `Clone` trait and calling
|
||||
//! the `clone` method.
|
||||
//! explicitly, by convention implementing the [`Clone`] trait and calling
|
||||
//! the [`clone`][clone] method.
|
||||
//!
|
||||
//! [`Clone`]: trait.Clone.html
|
||||
//! [clone]: trait.Clone.html#tymethod.clone
|
||||
//! [`Drop`]: ../../std/ops/trait.Drop.html
|
||||
//!
|
||||
//! Basic usage example:
|
||||
//!
|
||||
@ -46,22 +50,22 @@
|
||||
|
||||
/// A common trait for the ability to explicitly duplicate an object.
|
||||
///
|
||||
/// Differs from `Copy` in that `Copy` is implicit and extremely inexpensive, while
|
||||
/// 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
|
||||
/// 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.
|
||||
/// 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.
|
||||
/// 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:
|
||||
/// 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.
|
||||
@ -70,6 +74,9 @@
|
||||
/// library only implements `Clone` up until arrays of size 32. In this case, the implementation of
|
||||
/// `Clone` cannot be `derive`d, but can be implemented as:
|
||||
///
|
||||
/// [`Copy`]: ../../std/marker/trait.Copy.html
|
||||
/// [`clone()`]: trait.Clone.html#tymethod.clone
|
||||
///
|
||||
/// ```
|
||||
/// #[derive(Copy)]
|
||||
/// struct Stats {
|
||||
|
Loading…
x
Reference in New Issue
Block a user