QPointer 类是提供守卫指针的模板类,指向 QObject . 更多...
| 头: | #include <QPointer> |
| CMake: |
find_package(Qt6 REQUIRED COMPONENTS Core)
target_link_libraries(mytarget PRIVATE Qt6::Core) |
| qmake: | QT += core |
| QPointer () | |
| QPointer (std::nullptr_t) | |
| QPointer (T * p ) | |
(从 6.6 起)
|
QPointer (QPointer<X> && other ) |
(从 6.6 起)
|
QPointer (const QPointer<X> & other ) |
| ~QPointer () | |
| void | clear () |
| T * | data () const |
(从 6.0 起)
T *
|
get () const |
| bool | isNull () const |
| void | swap (QPointer<T> & other ) |
| T * | operator T * () const |
| T & | operator* () const |
| T * | operator-> () const |
(从 6.6 起)
QPointer<T> &
|
operator= (const QPointer<X> & other ) |
(since 6.6.1)
QPointer<T> &
|
operator= (QPointer<X> && other ) |
| QPointer<T> & | operator= (T * p ) |
| bool | operator!= (const QPointer<T> & p1 , const QPointer<X> & p2 ) |
| bool | operator!= (const QPointer<T> & p , X * o ) |
| bool | operator!= (X * o , const QPointer<T> & p ) |
| bool | operator!= (const QPointer<T> & lhs , std::nullptr_t) |
| bool | operator!= (std::nullptr_t, const QPointer<T> & rhs ) |
| bool | operator== (const QPointer<T> & p1 , const QPointer<X> & p2 ) |
| bool | operator== (const QPointer<T> & p , X * o ) |
| bool | operator== (X * o , const QPointer<T> & p ) |
| bool | operator== (const QPointer<T> & lhs , std::nullptr_t) |
| bool | operator== (std::nullptr_t, const QPointer<T> & rhs ) |
守卫指针 QPointer<T>,行为像正常 C++ 指针
T *
,除了它会被自动清零,当销毁引用对象时 (不像正常 C++ 指针,在这种情况下,会变成 "悬空指针")。
T
必须是子类化的
QObject
.
守卫指针很有用,每当需要存储的指针指向 QObject 由他人拥有,因此仍然可能在保持其引用时被销毁。可以安全地测试,指针的有效性。
注意,Qt 5 引入了轻微的行为变化,当使用 QPointer 时。
Qt 还提供 QSharedPointer ,计数引用共享指针对象的实现,可以用于维护单个指针的引用集合。
范例:
QPointer<QLabel> label = new QLabel;
label->setText("&Status:");
...
if (label)
label->show();
若
QLabel
被同时删除,
label
变量将保持
nullptr
而不是无效地址,且从不会执行最后一行。
The functions and operators available with a QPointer are the same as those available with a normal unguarded pointer, except the pointer arithmetic operators (
+
,
-
,
++
,和
--
), which are normally used only with arrays of objects.
使用 QPointer 像正常指针,且不需要阅读此类文档编制。
For creating guarded pointers, you can construct or assign to them from a T* or from another guarded pointer of the same type. You can compare them with each other using operator==() and operator!=(), or test for
nullptr
with
isNull
(). You can dereference them using either the
*x
或
x->member
表示法。
守卫指针将自动铸造成
T
*, so you can freely mix guarded and unguarded pointers. This means that if you have a QPointer<
QWidget
>, you can pass it to a function that requires a
QWidget
*. For this reason, it is of little value to declare functions to take a QPointer as a parameter; just use normal pointers. Use a QPointer when you are storing a pointer over time.
注意,类
T
必须继承
QObject
,否则会导致编译 (或链接) 错误。
另请参阅 QSharedPointer , QObject ,和 QObjectCleanupHandler .
[noexcept]
QPointer::
QPointer
()
[constexpr noexcept]
QPointer::
QPointer
(
std::nullptr_t
)
构造守卫指针采用值
nullptr
.
另请参阅 isNull ().
[noexcept, since 6.6]
template <typename X, QPointer<T>::if_convertible
[noexcept, since 6.6]
template <typename X, QPointer<T>::if_convertible
Conversion constructor. Constructs a new QPointer by moving or copying from other .
The moved-from QPointer is reset to nullptr.
注意:
These constructors participate in overload resolution only if
X*
is convertible to
T*
.
该函数在 Qt 6.6 引入。
构造守卫指针指向同一对象 p 所指向。
销毁守卫指针。就像正常指针,销毁守卫指针 not 销毁所指向的对象。
[noexcept]
void
QPointer::
clear
()
清零此 QPointer 对象。
另请参阅 isNull ().
[noexcept]
T
*QPointer::
data
() const
返回指向被守卫对象的指针。
[noexcept, since 6.0]
T
*QPointer::
get
() const
如同 data ()。此函数为兼容 STL (标准模板库) 提供。
该函数在 Qt 6.0 引入。
[noexcept]
bool
QPointer::
isNull
() const
返回
true
if the referenced object has been destroyed or if there is no referenced object; otherwise returns
false
.
[noexcept]
void
QPointer::
swap
(
QPointer
<
T
> &
other
)
交换内容对于此 QPointer 采用内容源于 other 。此操作非常快且从不失败。
[noexcept]
T
*QPointer::
operator T *
() const
Cast operator; implements pointer semantics. Because of this function you can pass a QPointer <T> to a function where a T* is required.
[noexcept]
T
&QPointer::
operator*
() const
Dereference operator; implements pointer semantics. Just use this operator as you would with a normal C++ pointer.
[noexcept]
T
*QPointer::
operator->
() const
Overloaded arrow operator; implements pointer semantics. Just use this operator as you would with a normal C++ pointer.
[noexcept, since 6.6]
template <typename X, QPointer<T>::if_convertible
Conversion assignment operator. Makes this guarded pointer guard the same object guarded by other .
注意:
This operator participates in overload resolution only if
X*
is convertible to
T*
.
该函数在 Qt 6.6 引入。
[noexcept, since 6.6.1]
template <typename X, QPointer<T>::if_convertible
Conversion move-assignment operator. Makes this guarded pointer guard the same object guarded by other and resets other to nullptr.
注意:
This operator participates in overload resolution only if
X*
is convertible to
T*
.
This function was introduced in Qt 6.6.1.
赋值运算符。此守卫指针现在将指向同一对象 p 所指向。
[noexcept]
template <typename X>
bool
operator!=
(const
QPointer
<
T
> &
p1
, const
QPointer
<
X
> &
p2
)
不相等操作符。返回
true
若守卫指针
p1
and
p2
未指向同一对象,否则返回
false
.
[noexcept]
template <typename X>
bool
operator!=
(const
QPointer
<
T
> &
p
,
X
*
o
)
不相等操作符。返回
true
if
o
和守卫指针
p
未指向同一对象,否则返回
false
.
[noexcept]
template <typename X>
bool
operator!=
(
X
*
o
, const
QPointer
<
T
> &
p
)
不相等操作符。返回
true
if
o
和守卫指针
p
未指向同一对象,否则返回
false
.
[noexcept]
bool
operator!=
(const
QPointer
<
T
> &
lhs
,
std::nullptr_t
)
不相等操作符。返回
true
if the pointer guarded by
lhs
is a valid (ie not
nullptr
) pointer, otherwise returns
false
.
[noexcept]
bool
operator!=
(
std::nullptr_t
, const
QPointer
<
T
> &
rhs
)
不相等操作符。返回
true
if the pointer guarded by
rhs
is a valid (ie not
nullptr
) pointer, otherwise returns
false
.
[noexcept]
template <typename X>
bool
operator==
(const
QPointer
<
T
> &
p1
, const
QPointer
<
X
> &
p2
)
相等运算符。返回
true
若守卫指针
p1
and
p2
指向同一对象,否则返回
false
.
[noexcept]
template <typename X>
bool
operator==
(const
QPointer
<
T
> &
p
,
X
*
o
)
相等运算符。返回
true
if
o
和守卫指针
p
指向同一对象,否则返回
false
.
[noexcept]
template <typename X>
bool
operator==
(
X
*
o
, const
QPointer
<
T
> &
p
)
相等运算符。返回
true
if
o
和守卫指针
p
指向同一对象,否则返回
false
.
[noexcept]
bool
operator==
(const
QPointer
<
T
> &
lhs
,
std::nullptr_t
)
相等运算符。返回
true
if the pointer guarded by
lhs
is
nullptr
,否则返回
false
.
[noexcept]
bool
operator==
(
std::nullptr_t
, const
QPointer
<
T
> &
rhs
)
相等运算符。返回
true
if the pointer guarded by
rhs
is
nullptr
,否则返回
false
.