qt翻译QPointer

来源:互联网 发布:java 创建线程 编辑:程序博客网 时间:2024/06/01 07:24
原文地址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=(),或者测试0isNull()。你能解除参考用*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指向的相同的对象

0 0
原创粉丝点击