pub struct OwnedPointer<T: FreeForeign + ?Sized> { /* private fields */ }Expand description
A RAII pointer that is automatically freed when it goes out of scope.
Implementations§
Source§impl<T: FreeForeign + ?Sized> OwnedPointer<T>
impl<T: FreeForeign + ?Sized> OwnedPointer<T>
Sourcepub unsafe fn new(ptr: *mut <T as FreeForeign>::Foreign) -> Self
pub unsafe fn new(ptr: *mut <T as FreeForeign>::Foreign) -> Self
Return a new OwnedPointer that wraps the pointer ptr.
§Safety
The pointer must be valid and live until the returned OwnedPointer
is dropped.
Sourcepub fn from<U>(x: OwnedPointer<U>) -> Self
pub fn from<U>(x: OwnedPointer<U>) -> Self
Safely create an OwnedPointer from one that has the same
freeing function.
let s = "Hello, world!";
let foreign_str = s.clone_to_foreign();
let foreign_string = OwnedPointer::<String>::from(foreign_str);Sourcepub fn into<U>(self) -> OwnedPointer<U>
pub fn into<U>(self) -> OwnedPointer<U>
Safely convert an OwnedPointer into one that has the same
freeing function.
let s = "Hello, world!";
let foreign_str = s.clone_to_foreign();
let foreign_string: OwnedPointer<String> = foreign_str.into();Sourcepub fn as_ptr(&self) -> *const <T as FreeForeign>::Foreign
pub fn as_ptr(&self) -> *const <T as FreeForeign>::Foreign
Return the pointer that is stored in the OwnedPointer. The
pointer is valid for as long as the OwnedPointer itself.
let s = "Hello, world!";
let foreign = s.clone_to_foreign();
let p = foreign.as_ptr();
let len = unsafe { libc::strlen(p) };
drop(foreign);pub fn as_mut_ptr(&self) -> *mut <T as FreeForeign>::Foreign
Sourcepub fn into_inner(self) -> *mut <T as FreeForeign>::Foreign
pub fn into_inner(self) -> *mut <T as FreeForeign>::Foreign
Return the pointer that is stored in the OwnedPointer,
consuming the OwnedPointer but not freeing the pointer.
let s = "Hello, world!";
let p = s.clone_to_foreign().into_inner();
let len = unsafe { libc::strlen(p) };
// p needs to be freed manuallySource§impl<T: FromForeign> OwnedPointer<T>
impl<T: FromForeign> OwnedPointer<T>
Sourcepub fn into_native(self) -> T
pub fn into_native(self) -> T
Convert a C datum to a native Rust object, taking ownership of
the pointer or Rust object (same as from_glib_full in glib-rs)
let s = "Hello, world!".to_string();
let foreign = s.clone_to_foreign();
let native: String = unsafe {
foreign.into_native()
// foreign is not leaked
};
assert_eq!(s, native);Trait Implementations§
Source§impl<T: FreeForeign + ?Sized> Debug for OwnedPointer<T>
impl<T: FreeForeign + ?Sized> Debug for OwnedPointer<T>
Source§impl<T: CloneToForeign + Default> Default for OwnedPointer<T>
impl<T: CloneToForeign + Default> Default for OwnedPointer<T>
Source§impl<T: FreeForeign + ?Sized> Drop for OwnedPointer<T>
impl<T: FreeForeign + ?Sized> Drop for OwnedPointer<T>
Auto Trait Implementations§
impl<T> Freeze for OwnedPointer<T>where
T: ?Sized,
impl<T> RefUnwindSafe for OwnedPointer<T>
impl<T> !Send for OwnedPointer<T>
impl<T> !Sync for OwnedPointer<T>
impl<T> Unpin for OwnedPointer<T>where
T: ?Sized,
impl<T> UnwindSafe for OwnedPointer<T>
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more