QT 智能指针 QPointer QScopedPointer QSharedPointer QWeakPointer QShare ...

一给  金牌会员 | 2024-5-15 01:30:39 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 864|帖子 864|积分 2592

QPointer

QPointer 是一种受掩护的指针,当其引用的对象被烧毁时,它会被自动清除(但是,烧毁引用对象还是必须手动delete)。QPointer所指向的对象必须是QObject或其派生类对象。
当多个指针指向同一个 Object 对象时,引用的对象可能被释放掉,这时使用 QPointer 就可以安全的测试引用对象是否有效,防止发生指针空悬。
注意:Qt5 之前,QPointer 指向一个 QWidget 对象(或子类对象)时,QPointer 由 QWidget 的析构函数清除,Qt5 之后 由 QObject 的析构函数清除。在析构函数烧毁被跟踪 QWidget 的子项之前,任何跟踪 QWidget 的 QPointers 都不会被清除。
QPointer 提供的函数和运算符与平凡指针的函数和运算符雷同,但算术运算符+、-、 ++ 和 --除外(它们通常仅用于对象数组)。
创建 QPointer 指针,可以使用构造函数、用 T * 赋值或雷同类型的其他 QPointer 。QPointer 比力可以使用 == 和 !=,或使用 isNull() 进行测试。可以使用 nullptr 或 *xx->member 取消引用。
QPointer 和平凡指针可以混用,QPointer会自动转换为指针*。可以把 QPointer 对象传递给需要 QWidget * 参数的函数。因此,声明函数时没有必要用 QPointer 作为参数,只需使用平凡指针即可。
[code]#include #include #include int main(int argc, char *argv[]){    QCoreApplication a(argc, argv);    QTimer *timer = new QTimer;    // QPointer timer = new QTimer;    delete timer;    // 不使用QPointer时需要设置timer为NULL    // timer=NULL;    if(timer)    {        qInfo()
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

一给

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表