diff options
| author | Kevin Reid <kpreid@switchb.org> | 2023-08-18 07:12:09 -0700 |
|---|---|---|
| committer | Kevin Reid <kpreid@switchb.org> | 2023-08-18 07:48:10 -0700 |
| commit | 2bccf1e296cf0d6c061b8ec1a6a777c7eecd93e9 (patch) | |
| tree | 9989a38e897d946da4618a05b8479633543b59c4 | |
| parent | b9177c0adb1ccae97145569c954696a4c680f5b3 (diff) | |
| download | rust-2bccf1e296cf0d6c061b8ec1a6a777c7eecd93e9.tar.gz rust-2bccf1e296cf0d6c061b8ec1a6a777c7eecd93e9.zip | |
Go into more detail about panicking in drop.
| -rw-r--r-- | library/core/src/ops/drop.rs | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/library/core/src/ops/drop.rs b/library/core/src/ops/drop.rs index 9ebf426be95..21c23dabfc2 100644 --- a/library/core/src/ops/drop.rs +++ b/library/core/src/ops/drop.rs @@ -217,8 +217,13 @@ pub trait Drop { /// /// # Panics /// - /// Given that a [`panic!`] will call `drop` as it unwinds, any [`panic!`] - /// in a `drop` implementation will likely abort. + /// Implementations should generally avoid [`panic!`]ing, because `drop()` may itself be called + /// during unwinding due to a panic, and if the `drop()` panics in that situation (a “double + /// panic”), this will likely abort the program. It is possible to check [`panicking()`] first, + /// which may be desirable for a `Drop` implementation that is reporting a bug of the kind + /// “you didn't finish using this before it was dropped”; but most types should simply clean up + /// their owned allocations or other resources and return normally from `drop()`, regardless of + /// what state they are in. /// /// Note that even if this panics, the value is considered to be dropped; /// you must not cause `drop` to be called again. This is normally automatically @@ -227,6 +232,7 @@ pub trait Drop { /// /// [E0040]: ../../error_codes/E0040.html /// [`panic!`]: crate::panic! + /// [`panicking()`]: ../../std/thread/fn.panicking.html /// [`mem::drop`]: drop /// [`ptr::drop_in_place`]: crate::ptr::drop_in_place #[stable(feature = "rust1", since = "1.0.0")] |
