[−][src]Struct qt_core::QPtr
A smart pointer that automatically resets when the object is deleted.
QPtr
exposes functionality provided by the QPointer<T>
C++ class.
QPtr
can only contain a pointer to a QObject
-based object. When that object is
deleted, QPtr
automatically becomes a null pointer.
Note that dereferencing a null QPtr
will panic, so if it's known that the object may
already have been deleted, you should use is_null()
, as_ref()
,
or a similar method to check
if the object is still alive before calling its methods.
QPtr
is not an owning pointer, similar to cpp_core::Ptr
. If you actually own the object,
you should convert it to QBox
(it will delete the object when dropped if it has no parent)
or CppBox
(it will always delete the object when dropped). QPtr
provides into_qbox
and
to_box
helpers for that.
Safety
While QPtr
is much safer than cpp_core::Ptr
and prevents use-after-free in common cases,
it is unsafe to use in Rust terms. QPtr::new
must receive a valid pointer or a null pointer,
otherwise the behavior is undefined. You should not store pointers of other types
(e.g. Ptr
, Ref
, or raw pointers) produced by QPtr
because, unlike QPtr
, these
pointers will not become null pointers when the object is deleted.
It's still possible to cause use-after-free by calling a method through QPtr
.
Even in a single threaded program, the accessed object can be deleted by a nested call
while one of its methods is still running. In multithreaded context, the object can be deleted
in another thread between the null check and the method call, also resulting in undefined
behavior.
Methods
impl<T: StaticUpcast<QObject>> QPtr<T>
[src]
pub unsafe fn new(target: impl CastInto<Ptr<T>>) -> Self
[src]
Creates a QPtr
from a Ptr
.
Safety
target
must be either a valid pointer to an object or a null pointer.
See type level documentation.
pub unsafe fn from_raw(target: *const T) -> Self
[src]
Creates a QPtr
from a raw pointer.
Safety
target
must be either a valid pointer to an object or a null pointer.
See type level documentation.
pub unsafe fn null() -> Self
[src]
Creates a null pointer.
Note that you can also use NullPtr
to specify a null pointer to a function accepting
impl CastInto<Ptr<_>>
. Unlike Ptr
, NullPtr
is not a generic type, so it will
not cause type inference issues.
Note that accessing the content of a null QPtr
through Deref
will result
in a panic.
Safety
Null pointers must not be dereferenced. See type level documentation.
pub unsafe fn is_null(&self) -> bool
[src]
Returns true if the pointer is null.
pub unsafe fn as_ptr(&self) -> Ptr<T>
[src]
pub unsafe fn as_raw_ptr(&self) -> *const T
[src]
pub unsafe fn as_ref(&self) -> Option<Ref<T>>
[src]
Returns the content as a const Ref
. Returns None
if self
is a null pointer.
Safety
See type level documentation.
pub unsafe fn static_upcast<U>(&self) -> QPtr<U> where
T: StaticUpcast<U>,
U: StaticUpcast<QObject>,
[src]
T: StaticUpcast<U>,
U: StaticUpcast<QObject>,
Converts the pointer to the base class type U
.
Safety
This operation is safe as long as self
is valid or null. See type level documentation.
pub unsafe fn static_downcast<U>(&self) -> QPtr<U> where
T: StaticDowncast<U>,
U: StaticUpcast<QObject>,
[src]
T: StaticDowncast<U>,
U: StaticUpcast<QObject>,
Converts the pointer to the derived class type U
.
It's recommended to use dynamic_cast
instead because it performs a checked conversion.
Safety
This operation is safe as long as self
is valid and it's type is U
or inherits from U
,
of if self
is a null pointer. See type level documentation.
pub unsafe fn dynamic_cast<U>(&self) -> QPtr<U> where
T: DynamicCast<U>,
U: StaticUpcast<QObject>,
[src]
T: DynamicCast<U>,
U: StaticUpcast<QObject>,
Converts the pointer to the derived class type U
. Returns None
if the object's type
is not U
and doesn't inherit U
.
Safety
This operation is safe as long as self
is valid or null. See type level documentation.
Trait Implementations
impl<'a, T: StaticUpcast<QObject>> AsReceiver for &'a QPtr<T> where
T: AsReceiver,
[src]
T: AsReceiver,
type Arguments = <T as AsReceiver>::Arguments
fn as_receiver(&self) -> Receiver<Self::Arguments>
[src]
impl<'a, T, U> CastFrom<&'a QPtr<U>> for Ptr<T> where
U: StaticUpcast<T> + StaticUpcast<QObject>,
[src]
U: StaticUpcast<T> + StaticUpcast<QObject>,
impl<T, U> CastFrom<QPtr<U>> for Ptr<T> where
U: StaticUpcast<T> + StaticUpcast<QObject>,
[src]
U: StaticUpcast<T> + StaticUpcast<QObject>,
impl<T: StaticUpcast<QObject>> Clone for QPtr<T>
[src]
Creates another pointer to the same object.
fn clone(&self) -> Self
[src]
fn clone_from(&mut self, source: &Self)
1.0.0[src]
impl<T: StaticUpcast<QObject>> Debug for QPtr<T>
[src]
impl<T: StaticUpcast<QObject>> Deref for QPtr<T>
[src]
Allows to call member functions of T
and its base classes directly on the pointer.
Panics if the pointer is null.
Auto Trait Implementations
impl<T> RefUnwindSafe for QPtr<T> where
T: RefUnwindSafe,
T: RefUnwindSafe,
impl<T> !Send for QPtr<T>
impl<T> !Sync for QPtr<T>
impl<T> Unpin for QPtr<T>
impl<T> UnwindSafe for QPtr<T> where
T: RefUnwindSafe,
T: RefUnwindSafe,
Blanket Implementations
impl<T> Any for T where
T: 'static + ?Sized,
[src]
T: 'static + ?Sized,
impl<T> Borrow<T> for T where
T: ?Sized,
[src]
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized,
[src]
T: ?Sized,
fn borrow_mut(&mut self) -> &mut T
[src]
impl<T, U> CastInto<U> for T where
U: CastFrom<T>,
[src]
U: CastFrom<T>,
impl<T> From<T> for T
[src]
impl<T, U> Into<U> for T where
U: From<T>,
[src]
U: From<T>,
impl<T> StaticUpcast<T> for T
[src]
unsafe fn static_upcast(ptr: Ptr<T>) -> Ptr<T>
[src]
unsafe fn static_upcast_mut(ptr: MutPtr<T>) -> MutPtr<T>
[src]
impl<T> ToOwned for T where
T: Clone,
[src]
T: Clone,
type Owned = T
The resulting type after obtaining ownership.
fn to_owned(&self) -> T
[src]
fn clone_into(&self, target: &mut T)
[src]
impl<T, U> TryFrom<U> for T where
U: Into<T>,
[src]
U: Into<T>,
type Error = Infallible
The type returned in the event of a conversion error.
fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>
[src]
impl<T, U> TryInto<U> for T where
U: TryFrom<T>,
[src]
U: TryFrom<T>,