QPointer 类

The QPointer class is a template class that provides guarded pointers to QObject . 更多...

头: #include <QPointer>

公共函数

QPointer ()
QPointer (T * p )
QPointer (const QPointer<T> & p )
~QPointer ()
T * data () const
bool isNull () const
operator T * () const
T & operator* () const
T * operator-> () const
QPointer<T> & operator= (const QPointer<T> & p )
QPointer<T> & operator= (T * p )
bool operator!= (const T * o , const QPointer<T> & p )
bool operator!= (const QPointer<T> & p , const T * o )
bool operator!= (T * o , const QPointer<T> & p )
bool operator!= (const QPointer<T> & p , T * o )
bool operator!= (const QPointer<T> & p1 , const QPointer<T> & p2 )
bool operator== (const T * o , const QPointer<T> & p )
bool operator== (const QPointer<T> & p , const T * o )
bool operator== (T * o , const QPointer<T> & p )
bool operator== (const QPointer<T> & p , T * o )
bool operator== (const QPointer<T> & p1 , const QPointer<T> & p2 )

详细描述

The QPointer class is a template class that provides guarded pointers to QObject .

A guarded pointer, QPointer <T>, behaves like a normal C++ pointer T * , except that it is automatically set to 0 when the referenced object is destroyed (unlike normal C++ pointers, which become "dangling pointers" in such cases). T 必须是子类化的 QObject .

守卫指针很有用,每当需要存储的指针指向 QObject 由他人拥有,因此仍然可能在保持其引用时被销毁。可以安全地测试,指针的有效性。

Qt 还提供 QSharedPointer ,计数引用共享指针对象的实现,可以用于维护单个指针的引用集合。

范例:

    QPointer<QLabel> label = new QLabel;
    label->setText("&Status:");
    ...
    if (label)
        label->show();
					

QLabel 被同时删除, label variable will hold 0 instead of an invalid address, and the last line will never be executed.

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 0 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 , QWeakPointer , QObject ,和 QObjectCleanupHandler .

成员函数文档编制

QPointer:: QPointer ()

Constructs a 0 guarded pointer.

另请参阅 isNull ().

QPointer:: QPointer ( T * p )

Constructs a guarded pointer that points to same object that p 所指向。

QPointer:: QPointer (const QPointer < T > & p )

Copies one guarded pointer from another. The constructed guarded pointer points to the same object that p points to (which may be 0).

QPointer:: ~QPointer ()

销毁守卫指针。就像正常指针,销毁守卫指针 not 销毁所指向的对象。

T * QPointer:: data () const

返回指向被守卫对象的指针。

该函数在 Qt 4.4 引入。

bool QPointer:: isNull () const

返回 true if the referenced object has been destroyed or if there is no referenced object; otherwise returns false.

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.

T & QPointer:: operator* () const

Dereference operator; implements pointer semantics. Just use this operator as you would with a normal C++ pointer.

T * QPointer:: operator-> () const

Overloaded arrow operator; implements pointer semantics. Just use this operator as you would with a normal C++ pointer.

QPointer < T > & QPointer:: operator= (const QPointer < T > & p )

赋值运算符。此守卫指针现在将指向同一对象 p 所指向。

QPointer < T > & QPointer:: operator= ( T * p )

赋值运算符。此守卫指针现在将指向同一对象 p 所指向。

相关非成员

bool operator!= (const T * o , const QPointer < T > & p )

Inequality operator. Returns true if o 和守卫指针 p are not pointing to the same object, otherwise returns false.

bool operator!= (const QPointer < T > & p , const T * o )

Inequality operator. Returns true if o 和守卫指针 p are not pointing to the same object, otherwise returns false.

bool operator!= ( T * o , const QPointer < T > & p )

Inequality operator. Returns true if o 和守卫指针 p are not pointing to the same object, otherwise returns false.

bool operator!= (const QPointer < T > & p , T * o )

Inequality operator. Returns true if o 和守卫指针 p are not pointing to the same object, otherwise returns false.

bool operator!= (const QPointer < T > & p1 , const QPointer < T > & p2 )

Inequality operator. Returns true if the guarded pointers p1 and p2 are not pointing to the same object, otherwise returns false.

bool operator== (const T * o , const QPointer < T > & p )

Equality operator. Returns true if o 和守卫指针 p are pointing to the same object, otherwise returns false.

bool operator== (const QPointer < T > & p , const T * o )

Equality operator. Returns true if o 和守卫指针 p are pointing to the same object, otherwise returns false.

bool operator== ( T * o , const QPointer < T > & p )

Equality operator. Returns true if o 和守卫指针 p are pointing to the same object, otherwise returns false.

bool operator== (const QPointer < T > & p , T * o )

Equality operator. Returns true if o 和守卫指针 p are pointing to the same object, otherwise returns false.

bool operator== (const QPointer < T > & p1 , const QPointer < T > & p2 )

Equality operator. Returns true if the guarded pointers p1 and p2 are pointing to the same object, otherwise returns false.