原文地址http://no001.blog.51cto.com/1142339/272102
QT自己的指
QPointer 类是一个样板类,提供一个受保护的指针。
#include <QPointer>
Public Functions
|
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 )
|
详细描述:
一个受保护的指针,
QPointer<T>,
像一个正常的
c++
的指针
T*
。当参考对象被摧毁,他是自动置零。
T
必须是
QObject
的子类。
受保护的指针是有用的,当你需要存储一个指针到一个
QObject
。这个
QObject
被一些其他的对象拥有,因此可能被摧毁,当你仍然保持一个对它的参考。你能安全的测试指针的有效性。
Qt
也提供
QSharePointer
,一个集成的参考分享指针对象。他能被用来保持到一个参考的链接。
例如:
QPointer<QLabel> 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>,
你能通过它到一个要求一个
QWidget
的函数。所以,那是没有意义的宣布函数使用一个
Qpointer
作为参数,只是使用一个正常的指针。
使用
Qpointer
当你存储一个过时指针。
注意
class T
必须继承
QObject
,否则一个编译或者链接错误将产生。
也看
QSharePointer QObject QObjectCleanupHandler
成员函数文件
QPointer
::
QPointer
()
构造一个受保护的指针。
QPointer::QPointer ( T * p )
构造一个受保护的指针,他指向
p
所指向的相同的对象
QPointer::QPointer ( const QPointer<T> & p )
复制一个受保护的指针从另外一个。
QPointer::~QPointer ()
摧毁一个受保护的指针
T * QPointer::data () const
返回指向受保护对象的指针
bool QPointer::isNull () const
如果参考对象已经被摧毁或者如果没有一个参考对象,返回
true
QPointer::operator T * () const
投射运算符。执行指针语义。因为这个函数你能传递一个
QPointer<T>
到一个函数,哪里一个
T*
被需要。
T & QPointer::operator* () const
摧毁参考运算符。
T * QPointer::operator-> () const
过载箭头(
arrow
)操作符;
QPointer<T> & QPointer::operator= ( const QPointer<T> & p )
分配操作符。这个受保护的指针将要指向一个
p
指向的相同的对象
QPointer<T> & QPointer::operator= ( T * p )
分配运算符。这个受保护的指针将要指向一个
p
指向的相同的对象