Rollup merge of #103280 - finnbear:impl_string_leak_2, r=joshtriplett
(#102929) Implement `String::leak` (attempt 2) Implementation of `String::leak` (#102929) ACP: https://github.com/rust-lang/libs-team/issues/109 Supersedes #102941 (see previous reviews there) ```@rustbot``` label +T-libs-api -T-libs
This commit is contained in:
commit
141478b40f
@ -67,7 +67,7 @@ use core::str::Utf8Chunks;
|
|||||||
use crate::borrow::{Cow, ToOwned};
|
use crate::borrow::{Cow, ToOwned};
|
||||||
use crate::boxed::Box;
|
use crate::boxed::Box;
|
||||||
use crate::collections::TryReserveError;
|
use crate::collections::TryReserveError;
|
||||||
use crate::str::{self, Chars, Utf8Error};
|
use crate::str::{self, from_utf8_unchecked_mut, Chars, Utf8Error};
|
||||||
#[cfg(not(no_global_oom_handling))]
|
#[cfg(not(no_global_oom_handling))]
|
||||||
use crate::str::{from_boxed_utf8_unchecked, FromStr};
|
use crate::str::{from_boxed_utf8_unchecked, FromStr};
|
||||||
use crate::vec::Vec;
|
use crate::vec::Vec;
|
||||||
@ -1849,6 +1849,35 @@ impl String {
|
|||||||
let slice = self.vec.into_boxed_slice();
|
let slice = self.vec.into_boxed_slice();
|
||||||
unsafe { from_boxed_utf8_unchecked(slice) }
|
unsafe { from_boxed_utf8_unchecked(slice) }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// 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.
|
||||||
|
///
|
||||||
|
/// It does not reallocate or shrink the `String`,
|
||||||
|
/// so the leaked allocation may include unused capacity that is not part
|
||||||
|
/// of the returned slice.
|
||||||
|
///
|
||||||
|
/// # 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")]
|
||||||
|
#[inline]
|
||||||
|
pub fn leak(self) -> &'static mut str {
|
||||||
|
let slice = self.vec.leak();
|
||||||
|
unsafe { from_utf8_unchecked_mut(slice) }
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl FromUtf8Error {
|
impl FromUtf8Error {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user