File tree Expand file tree Collapse file tree 2 files changed +44
-0
lines changed Expand file tree Collapse file tree 2 files changed +44
-0
lines changed Original file line number Diff line number Diff line change @@ -934,6 +934,28 @@ impl<T: ?Sized> Rc<T> {
934
934
Weak { ptr : this. ptr }
935
935
}
936
936
937
+ /// Convert a reference to an [`Rc`] into a reference to a [`Weak`] of the same type.
938
+ ///
939
+ /// This is a type-only operation; it doesn't modify the inner reference counts.
940
+ ///
941
+ /// # Examples
942
+ ///
943
+ /// ```
944
+ /// #![feature(rc_as_weak)]
945
+ ///
946
+ /// use std::rc::{Rc, Weak};
947
+ ///
948
+ /// let five: &Rc<i32> = &Rc::new(5);
949
+ ///
950
+ /// let weak_five: &Weak<i32> = Rc::as_weak(five);
951
+ /// ```
952
+ #[ inline]
953
+ #[ unstable( feature = "rc_as_weak" , issue = "none" ) ]
954
+ #[ must_use]
955
+ pub const fn as_weak < ' a > ( this : & ' a Self ) -> & ' a Weak < T > {
956
+ unsafe { mem:: transmute :: < & ' a Rc < T > , & ' a Weak < T > > ( this) }
957
+ }
958
+
937
959
/// Gets the number of [`Weak`] pointers to this allocation.
938
960
///
939
961
/// # Examples
Original file line number Diff line number Diff line change @@ -961,6 +961,28 @@ impl<T: ?Sized> Arc<T> {
961
961
}
962
962
}
963
963
964
+ /// Convert a reference to an [`Arc`] into a reference to a [`Weak`] of the same type.
965
+ ///
966
+ /// This is a type-only operation; it doesn't modify the inner reference counts.
967
+ ///
968
+ /// # Examples
969
+ ///
970
+ /// ```
971
+ /// #![feature(rc_as_weak)]
972
+ ///
973
+ /// use std::sync::{Arc, Weak};
974
+ ///
975
+ /// let five: &Arc<i32> = &Arc::new(5);
976
+ ///
977
+ /// let weak_five: &Weak<i32> = Arc::as_weak(five);
978
+ /// ```
979
+ #[ inline]
980
+ #[ unstable( feature = "rc_as_weak" , issue = "none" ) ]
981
+ #[ must_use]
982
+ pub const fn as_weak < ' a > ( this : & ' a Self ) -> & ' a Weak < T > {
983
+ unsafe { mem:: transmute :: < & ' a Arc < T > , & ' a Weak < T > > ( this) }
984
+ }
985
+
964
986
/// Gets the number of [`Weak`] pointers to this allocation.
965
987
///
966
988
/// # Safety
You can’t perform that action at this time.
0 commit comments