about summary refs log tree commit diff
diff options
context:
space:
mode:
authorOtto Rask <ojrask@gmail.com>2018-08-29 13:20:56 +0300
committerOtto Rask <ojrask@gmail.com>2018-08-29 13:20:56 +0300
commit5399616f1d98b4bcc1da87af15f75c95e3c2288b (patch)
treec86c2e4583f614d5080cc05cd4ae4384a7d2c6d6
parentf4e981cfe474f598b34ca07df8c8f16f042e120f (diff)
downloadrust-5399616f1d98b4bcc1da87af15f75c95e3c2288b.tar.gz
rust-5399616f1d98b4bcc1da87af15f75c95e3c2288b.zip
Make Arc cloning mechanics clearer in module docs
Add some more wording to module documentation regarding how
`Arc::clone()` works, as some users have assumed cloning Arc's
to work via dereferencing to inner value as follows:

    use std::sync::Arc;

    let myarc = Arc::new(1);
    let myarcref = myarc.clone();

    assert!(1 == myarcref);

Instead of the actual mechanic of referencing the existing
Arc value:

    use std::sync::Arg;

    let myarc = Arc::new(1);
    let myarcref = myarc.clone();

    assert!(myarcref == &myarc); // not sure if assert could assert this
    in the real world
-rw-r--r--src/liballoc/sync.rs9
1 files changed, 5 insertions, 4 deletions
diff --git a/src/liballoc/sync.rs b/src/liballoc/sync.rs
index 2cd7898f4c7..176743fdd1d 100644
--- a/src/liballoc/sync.rs
+++ b/src/liballoc/sync.rs
@@ -49,9 +49,9 @@ const MAX_REFCOUNT: usize = (isize::MAX) as usize;
 ///
 /// The type `Arc<T>` provides shared ownership of a value of type `T`,
 /// allocated in the heap. Invoking [`clone`][clone] on `Arc` produces
-/// a new pointer to the same value in the heap. When the last `Arc`
-/// pointer to a given value is destroyed, the pointed-to value is
-/// also destroyed.
+/// a new pointer to the same `Arc` reference value in the heap. When the last
+/// `Arc` pointer to a given value is destroyed, the pointed-to value is also
+/// destroyed.
 ///
 /// Shared references in Rust disallow mutation by default, and `Arc` is no
 /// exception: you cannot generally obtain a mutable reference to something
@@ -107,7 +107,8 @@ const MAX_REFCOUNT: usize = (isize::MAX) as usize;
 /// // The two syntaxes below are equivalent.
 /// let a = foo.clone();
 /// let b = Arc::clone(&foo);
-/// // a and b both point to the same memory location as foo.
+/// // a and b both point to the same memory location where foo resides
+/// // (not where the value wrapped by foo resides).
 /// ```
 ///
 /// The [`Arc::clone(&from)`] syntax is the most idiomatic because it conveys more explicitly