Skip to content

Commit

Permalink
Rollup merge of #109814 - est31:stabilize_string_leak, r=Amanieu
Browse files Browse the repository at this point in the history
Stabilize String::leak

Stabilizes the following API:

```Rust
impl String {
    pub fn leak(self) -> &'static mut str;
}
```

closes #102929

blocked by having an FCP for stabilization.
  • Loading branch information
matthiaskrgr authored Jun 14, 2023
2 parents d54bb50 + 3ab0d90 commit b8f71ea
Showing 1 changed file with 8 additions and 7 deletions.
15 changes: 8 additions & 7 deletions library/alloc/src/string.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1853,26 +1853,27 @@ impl String {
/// Consumes and leaks the `String`, returning a mutable reference to the contents,
/// `&'a mut str`.
///
/// This is mainly useful for data that lives for the remainder of
/// the program's life. Dropping the returned reference will cause a memory
/// leak.
/// The caller has free choice over the returned lifetime, including `'static`. Indeed,
/// this function is ideally used for data that lives for the remainder of the program's life,
/// as dropping the returned reference will cause a memory leak.
///
/// It does not reallocate or shrink the `String`,
/// so the leaked allocation may include unused capacity that is not part
/// of the returned slice.
/// of the returned slice. If you don't want that, call [`into_boxed_str`],
/// and then [`Box::leak`].
///
/// [`into_boxed_str`]: Self::into_boxed_str
///
/// # Examples
///
/// Simple usage:
///
/// ```
/// #![feature(string_leak)]
///
/// let x = String::from("bucket");
/// let static_ref: &'static mut str = x.leak();
/// assert_eq!(static_ref, "bucket");
/// ```
#[unstable(feature = "string_leak", issue = "102929")]
#[stable(feature = "string_leak", since = "CURRENT_RUSTC_VERSION")]
#[inline]
pub fn leak<'a>(self) -> &'a mut str {
let slice = self.vec.leak();
Expand Down

0 comments on commit b8f71ea

Please sign in to comment.