File tree Expand file tree Collapse file tree 2 files changed +35
-0
lines changed
Expand file tree Collapse file tree 2 files changed +35
-0
lines changed Original file line number Diff line number Diff line change @@ -3,6 +3,7 @@ use std::ffi::c_void;
33use std:: fmt:: { self , Debug , Display } ;
44use std:: marker:: PhantomData ;
55use std:: mem;
6+ use std:: ops:: { Deref , DerefMut } ;
67use std:: ptr;
78
89/// Binding to C++ `std::unique_ptr<T, std::default_delete<T>>`.
9495 }
9596}
9697
98+ impl < T > Deref for UniquePtr < T >
99+ where
100+ T : UniquePtrTarget ,
101+ {
102+ type Target = T ;
103+
104+ fn deref ( & self ) -> & Self :: Target {
105+ match self . as_ref ( ) {
106+ Some ( target) => target,
107+ None => panic ! ( "called deref on a null UniquePtr<{}>" , T :: __NAME) ,
108+ }
109+ }
110+ }
111+
112+ impl < T > DerefMut for UniquePtr < T >
113+ where
114+ T : UniquePtrTarget ,
115+ {
116+ fn deref_mut ( & mut self ) -> & mut Self :: Target {
117+ match self . as_mut ( ) {
118+ Some ( target) => target,
119+ None => panic ! ( "called deref_mut on a null UniquePtr<{}>" , T :: __NAME) ,
120+ }
121+ }
122+ }
123+
97124impl < T > Debug for UniquePtr < T >
98125where
99126 T : Debug + UniquePtrTarget ,
Original file line number Diff line number Diff line change 1+ use cxx:: { CxxString , UniquePtr } ;
2+
3+ #[ test]
4+ #[ should_panic = "called deref on a null UniquePtr<CxxString>" ]
5+ fn test_deref_null ( ) {
6+ let unique_ptr = UniquePtr :: < CxxString > :: null ( ) ;
7+ let _: & CxxString = & unique_ptr;
8+ }
You can’t perform that action at this time.
0 commit comments