QT自己的指针!

QPointer Class Reference
[QtCore module]

QPointer 类是一个样板类,提供一个受保护的指针。
#include

Public Functions

 
QPointer   ()
 
QPointer   ( T * p )
 
QPointer   ( const QPointer & p )
 
~QPointer   ()
T *
data   () const
bool
isNull   () const
 
operator T *   () const
T &
operator*   () const
T *
operator->   () const
QPointer &
operator=   ( const QPointer & p )
QPointer &
operator=   ( T * p )
详细描述:
一个受保护的指针, QPointer, 像一个正常的 c++ 的指针 T* 。当参考对象被摧毁,他是自动置零。 T 必须是 QObject 的子类。
受保护的指针是有用的,当你需要存储一个指针到一个 QObject 。这个 QObject 被一些其他的对象拥有,因此可能被摧毁,当你仍然保持一个对它的参考。你能安全的测试指针的有效性。
Qt 也提供 QSharePointer ,一个集成的参考分享指针对象。他能被用来保持到一个参考的链接。
例如:
QPointer label = new QLabel;
        
     label->setText("&Status:");
        
     ...
        
     if (label)
        
         label->show();
        
如果这个 Qlabel 同时被删除, label 同时被置零而不是变成一个无效的地址。因此最后一行将绝不运行。
这个带有 Qpointer 的可变的函数和运算符,是同样的和那些可变的带有一个正常的没有保护的指针,除了那些数学运算( + - ++ -- )。这些只有和数组对象一起才正常。
使用 QPointer 像正常的指针,你将不需要读类文件。
使用受保护的指针,你能构造或者设置他们从一个 T* 或者从其他相同类型的受保护的指针。您能比较他们用 operator== ()和 operator = (),或者测试 0 isNull ()。你能解除参考用 *x 或者 x->member 记号。
一个受保护的指针将要自动的投射到 T* ,所以你能自由的混合受保护的和不受保护的指针。这意味着如果你有一个 Qpointer, 你能通过它到一个要求一个 QWidget 的函数。所以,那是没有意义的宣布函数使用一个 Qpointer 作为参数,只是使用一个正常的指针。
使用 Qpointer 当你存储一个过时指针。
注意 class T 必须继承 QObject ,否则一个编译或者链接错误将产生。
也看 QSharePointer   QObject   QObjectCleanupHandler
成员函数文件
QPointer :: QPointer ()
构造一个受保护的指针。

QPointer::QPointer ( T * p )

构造一个受保护的指针,他指向 p 所指向的相同的对象

QPointer::QPointer ( const QPointer & p )

复制一个受保护的指针从另外一个。

QPointer::~QPointer ()

摧毁一个受保护的指针

T * QPointer::data () const

返回指向受保护对象的指针

bool QPointer::isNull () const

如果参考对象已经被摧毁或者如果没有一个参考对象,返回 true

QPointer::operator T * () const

投射运算符。执行指针语义。因为这个函数你能传递一个 QPointer 到一个函数,哪里一个 T* 被需要。

T & QPointer::operator* () const

摧毁参考运算符。

T * QPointer::operator-> () const

过载箭头( arrow )操作符;

QPointer & QPointer::operator= ( const QPointer & p )

分配操作符。这个受保护的指针将要指向一个 p 指向的相同的对象

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

分配运算符。这个受保护的指针将要指向一个 p 指向的相同的对象