From 663b0fb578028cea17dd621df53a21145e0636a0 Mon Sep 17 00:00:00 2001 From: Eric Huss Date: Tue, 6 Aug 2019 10:55:26 -0700 Subject: [PATCH 1/2] Update partially initialized values in drop documentation. --- src/destructors.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/destructors.md b/src/destructors.md index bafcbefe05efc..07590f9f5c8c4 100644 --- a/src/destructors.md +++ b/src/destructors.md @@ -63,10 +63,11 @@ loop { moved = ShowOnDrop("Drops when moved"); // drops now, but is then uninitialized moved; + // Uninitialized does not drop. let uninitialized: ShowOnDrop; // Only first element drops - let mut partially_initialized: (ShowOnDrop, ShowOnDrop); - partially_initialized.0 = ShowOnDrop("Partial tuple first"); + let mut partially_initialized = (ShowOnDrop("one"), ShowOnDrop("two")); + core::mem::forget(partially_initialized.1); } ``` From a5b0281bdd8ce1c460e55b881b97427088135165 Mon Sep 17 00:00:00 2001 From: Eric Huss Date: Tue, 6 Aug 2019 17:15:03 -0700 Subject: [PATCH 2/2] Try a more explicit example for partial move destructor. --- src/destructors.md | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/destructors.md b/src/destructors.md index 07590f9f5c8c4..a24451d82e8eb 100644 --- a/src/destructors.md +++ b/src/destructors.md @@ -63,11 +63,15 @@ loop { moved = ShowOnDrop("Drops when moved"); // drops now, but is then uninitialized moved; + // Uninitialized does not drop. let uninitialized: ShowOnDrop; - // Only first element drops - let mut partially_initialized = (ShowOnDrop("one"), ShowOnDrop("two")); - core::mem::forget(partially_initialized.1); + + // After a partial move, only the remaining fields are dropped. + let mut partial_move = (ShowOnDrop("first"), ShowOnDrop("forgotten")); + // Perform a partial move, leaving only `partial_move.0` initialized. + core::mem::forget(partial_move.1); + // When partial_move's scope ends, only the first field is dropped. } ```