返回介绍

QGuardedPtr类

发布于 2019-10-04 15:00:35 字数 3542 浏览 1120 评论 0 收藏 0

QGuardedPtr类是一个提供被监视的QObject的指针的模板类。 详情请见……

#include <qguardedptr.h>

所有成员函数的列表。

公有成员

  • QGuardedPtr ()
  • QGuardedPtr ( T*p )
  • QGuardedPtr ( constQGuardedPtr<T>&p )
  • ~QGuardedPtr ()
  • QGuardedPtr<T> & operator= ( constQGuardedPtr<T>&p )
  • QGuardedPtr<T> & operator= ( T*p )
  • bool operator== ( constQGuardedPtr<T>&p ) const
  • bool operator!= ( constQGuardedPtr<T>&p ) const
  • bool isNull () const
  • T * operator-> () const
  • T & operator* () const
  • operator T * () const

详细描述

QGuardedPtr类是一个提供被监视的QObject的指针的模板类。

一个被监视的指针,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()来测试它是否为零。并且你可以使用*xx->member符号来解除引用。

被监视的指针会自动地抛出X*,所以你可以自由地混合被监视的和未被监视的指针。这也就是说如果你有一个QGuardedPtr,你可以把它传递给一个需要QWidget*的函数。因为这个原因,在声明函数中使用一个QGuardedPtr作为参数,没有多少价值,所以请使用普通的指针。当你长时间保存一个指针的时候,请使用QGuardedPtr。

请再次注意X类必须继承QObject,否则会得到一个编译或者链接错误。

也可以参考对象模型。


成员函数文档

QGuardedPtr::QGuardedPtr ()

构造一个为0的被监视的指针。

也可以参考isNull()。

QGuardedPtr::QGuardedPtr ( T*p )

构造一个和p指向相同对象的被监视的指针。

QGuardedPtr::QGuardedPtr ( constQGuardedPtr<T>&p )

从另一个被监视的指针复制过来。被构造的被监视指针和p指向相同对象(也许它为0)。

QGuardedPtr::~QGuardedPtr ()

销毁这个被监视的指针。就像一个普通的指针一样,销毁被监视的指针并销毁所指向的对象。

bool QGuardedPtr::isNull () const

如果被引用的对象已经被销毁或者没有被引用的对象,返回真,否则返回假。

QGuardedPtr::operator T * () const

抛出操作符,实现了指针语义。因为这个函数,你可以通过把一个QGuardedPtr<X>传递给一个需要X*的函数。

bool QGuardedPtr::operator!= ( constQGuardedPtr<T>&p ) const

不等于操作符,实现了指针语义。和operator==()相反。如果p和这个被监视的指针指向的不是同一个对象,返回真,否则返回假。

T & QGuardedPtr::operator* () const

解除引用操作符,实现了指针语义。使用这个操作符就像你对普通的C++指针做的一样。

T * QGuardedPtr::operator-> () const

重载箭头操作符,实现了指针语义。使用这个操作符就像你对普通的C++指针做的一样。

QGuardedPtr<T>& QGuardedPtr::operator= ( constQGuardedPtr<T>&p )

赋值操作符。这个被监视的指针就会和p一样指向相同的对象。

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

这是一个重载成员函数,提供了方便。它的行为基本上和上面的函数相同。

赋值操作符。这个被监视的指针就会和p一样指向相同的对象。

bool QGuardedPtr::operator== ( constQGuardedPtr<T>&p ) const

等于操作符,实现了传统的指针语义。如果p和这个被监视的指针都是0,或者如果p和这个被监视的指针都指向相同的对象,返回真,否则返回假。

也可以参考operator!=().

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文