主页 | 所有的类 | 主要的类 | 注释的类 | 分组的类 | 函数 |
QGuardedPtr类是一个提供被监视的QObject的指针的模板类。 详情请见……
#include <qguardedptr.h>
一个被监视的指针,QGuardedPtr<X>行为就和一个普通的C++指针X*一样,除了当被引用的对象被销毁时,它能够自动地被设置为0(不像普通的C++指针,在这种情况下就变成了“摇摆的指针”)。X必须是QObject的子类。
只要你需要存储一个被其它的所拥有的并且有可能在你还保留它的引用的时候它已经被销毁了的QObject的指针的时候,被监视的指针就是有用的。你可以安全地测试指针的有效性。
实例:
QGuardedPtr<QFrame> label = new QLabel( 0,"label" ); label->setText( "I like guarded pointers" ); delete (QLabel*) label; // 模拟某人销毁了这个标签 if ( label) label->show(); else qDebug("The label has been destroyed");
这个程序将会输出
The label has been destroyed而不是解除引用的label->show()的一个无效地址。
QGuardedPtr提供的函数和操作符和普通的未被监视的指针提供的一样,除了指针的算术运算(++、--、-和+),它们通常只对数组对象有用。把它们用作普通的指针,你就不需要再都这份类文档了。
为了创建被监视的指针,你可以通过一个X*或者另一个同类型的被监视的指针来构造和赋值。你可以用operator==()来比较它们是不是相等,用operator!=()来比较它们是不是不等,或者用isNull()来测试它是否为零。并且你可以使用*x或x->member符号来解除引用。
被监视的指针会自动地抛出X*,所以你可以自由地混合被监视的和未被监视的指针。这也就是说如果你有一个QGuardedPtr 请再次注意X类必须继承QObject,否则会得到一个编译或者链接错误。
也可以参考对象模型。
构造一个为0的被监视的指针。
也可以参考isNull()。
构造一个和p指向相同对象的被监视的指针。
从另一个被监视的指针复制过来。被构造的被监视指针和p指向相同对象(也许它为0)。
销毁这个被监视的指针。就像一个普通的指针一样,销毁被监视的指针并不销毁所指向的对象。
如果被引用的对象已经被销毁或者没有被引用的对象,返回真,否则返回假。
抛出操作符,实现了指针语义。因为这个函数,你可以通过把一个QGuardedPtr<X>传递给一个需要X*的函数。
不等于操作符,实现了指针语义。和operator==()相反。如果p和这个被监视的指针指向的不是同一个对象,返回真,否则返回假。
解除引用操作符,实现了指针语义。使用这个操作符就像你对普通的C++指针做的一样。
重载箭头操作符,实现了指针语义。使用这个操作符就像你对普通的C++指针做的一样。
赋值操作符。这个被监视的指针就会和p一样指向相同的对象。
赋值操作符。这个被监视的指针就会和p一样指向相同的对象。
等于操作符,实现了传统的指针语义。如果p和这个被监视的指针都是0,或者如果p和这个被监视的指针都指向相同的对象,返回真,否则返回假。
也可以参考operator!=().
这个文件是Qt工具包一部分。
版权所有 © 1995-2002
Trolltech。保留所有权利。
成员函数文档
QGuardedPtr::QGuardedPtr ()
QGuardedPtr::QGuardedPtr ( T * p )
QGuardedPtr::QGuardedPtr ( const QGuardedPtr<T> & p )
QGuardedPtr::~QGuardedPtr ()
bool QGuardedPtr::isNull () const
QGuardedPtr::operator T * () const
bool QGuardedPtr::operator!= ( const QGuardedPtr<T> & p ) const
T & QGuardedPtr::operator* () const
T * QGuardedPtr::operator-> () const
QGuardedPtr<T> & QGuardedPtr::operator= ( const QGuardedPtr<T> & p )
QGuardedPtr<T> & QGuardedPtr::operator= ( T * p )
这是一个重载成员函数,提供了方便。它的行为基本上和上面的函数相同。
bool QGuardedPtr::operator== ( const QGuardedPtr<T> & p ) const
Copyright © 2002
Trolltech
Trademarks
译者:Cavendish