@@ -69,7 +69,7 @@ use crate::boxed::Box;
69
69
use crate :: collections:: TryReserveError ;
70
70
use crate :: str:: { self , Chars , Utf8Error } ;
71
71
#[ cfg( not( no_global_oom_handling) ) ]
72
- use crate :: str:: { from_boxed_utf8_unchecked, FromStr } ;
72
+ use crate :: str:: { from_boxed_utf8_unchecked, from_utf8_unchecked_mut , FromStr } ;
73
73
use crate :: vec:: Vec ;
74
74
75
75
/// A UTF-8–encoded, growable string.
@@ -1849,6 +1849,30 @@ impl String {
1849
1849
let slice = self . vec . into_boxed_slice ( ) ;
1850
1850
unsafe { from_boxed_utf8_unchecked ( slice) }
1851
1851
}
1852
+
1853
+ /// Consumes and leaks the `String`, returning a mutable reference to the contents,
1854
+ /// `&'a mut str`.
1855
+ ///
1856
+ /// This function is mainly useful for data that lives for the remainder of
1857
+ /// the program's life. Dropping the returned reference will cause a memory
1858
+ /// leak.
1859
+ ///
1860
+ /// # Examples
1861
+ ///
1862
+ /// Simple usage:
1863
+ ///
1864
+ /// ```
1865
+ /// let x = String::from("bucket");
1866
+ /// let static_ref: &'static mut str = x.leak();
1867
+ /// assert_eq!(static_ref, "bucket");
1868
+ /// ```
1869
+ #[ cfg( not( no_global_oom_handling) ) ]
1870
+ #[ unstable( feature = "string_leak" , issue = "102929" ) ]
1871
+ #[ inline]
1872
+ pub fn leak < ' a > ( self ) -> & ' a mut str {
1873
+ let slice = self . into_bytes ( ) . leak ( ) ;
1874
+ unsafe { from_utf8_unchecked_mut ( slice) }
1875
+ }
1852
1876
}
1853
1877
1854
1878
impl FromUtf8Error {
0 commit comments