From 0f248d8ea9403850cd3d80b370fcc9b6793f17b1 Mon Sep 17 00:00:00 2001 From: FZs <39064892+fzs111@users.noreply.github.com> Date: Fri, 22 Sep 2023 19:33:33 +0200 Subject: [PATCH] Clarify example in `Pin::new_unchecked` docs --- library/core/src/pin.rs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/library/core/src/pin.rs b/library/core/src/pin.rs index 6b319b4355ce..94c682b615ad 100644 --- a/library/core/src/pin.rs +++ b/library/core/src/pin.rs @@ -572,7 +572,10 @@ impl Pin

{ /// // though we have previously pinned it! We have violated the pinning API contract. /// } /// ``` - /// A value, once pinned, must remain pinned forever (unless its type implements `Unpin`). + /// A value, once pinned, must remain pinned until it is dropped (unless its type implements + /// `Unpin`). Because `Pin<&mut T>` does not own the value, dropping the `Pin` will not drop + /// the value and will not end the pinning contract. So moving the value after dropping the + /// `Pin<&mut T>` is still a violation of the API contract. /// /// Similarly, calling `Pin::new_unchecked` on an `Rc` is unsafe because there could be /// aliases to the same data that are not subject to the pinning restrictions: