Qt基础之四十三:Qt智能指针(QPointer、QSharedPointer、QWeakPointer和QScopedPointer)

一.QPointer

QPointer是一个模板类,用于指向QObject或其派生类对象。当QPointer指向的对象销毁时,它会被自动设置为nullptr(在QObject析构时),这和普通C++指针是不同的(普通的C++指针delete后会变为“悬空指针”,需要手动设置为nullptr)。
QPointer的使用场景:QPointer指向的对象可能在其他地方也用到了,那么在使用这个QPointer指针之前,可以用先和nullptr比较或者调用其isNull()方法做判断,防止它指向的对象已经被销毁了。
要特别注意的是,当一个QPointer指针超出作用域时,并不会删除它指向的对象。这和其他的智能指针是不同的。

#include <QObject>
#include <QPointer>
#include <QDebug>int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    QObject *obj = new QObject;
    {
        QPointer<QObject> pObj = obj;
    }
    // 超出pObj作用域,但是obj并未销毁.
    if (obj != nullptr)
    {
        qDebug()<< "obj is alive";
    }
    QPointer<QObject> pObj = obj;
    delete obj;
    // 删除obj后,pObj自动设置为nullptr.
    if (pObj == nullptr)
    {
        

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/585547.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JavaEE - 网络编程之回显服务器

目录 一.什么是回显服务器&#xff1f; 二.UDP是什么&#xff1f; 1.TCP 是有链接的&#xff0c; UDP 是无连接的 2.TCP是可靠传输的,UDP是不可靠传输的 3.TCP是面向字节流的&#xff0c;UDP是面向数据报 4.TCP和UDP是全双工的 三.UDP的 socket api 四. 具体代码实现 …

Qt Designer中各个模块的详细介绍,小白一看就会!!第3部分——Item Views (Model-Based) 模块介绍

Item Views (Model-Based) 模块的详细介绍 在Qt Designer中&#xff0c;Item Views (Model-Based) 模块是一组基于模型/视图&#xff08;Model/View&#xff09;架构的控件&#xff0c;用于展示和操作数据。这些控件与数据模型紧密结合&#xff0c;使得数据展示变得更加灵活和…

SAP问题 OPEN SQL 取不到值

关键&#xff1a;数据库中有数据&#xff0c;但是open sql取不到数据 背景&#xff1a; 标准程序在测试环境正常执行&#xff0c;在生产环境报错。 解决过程&#xff1a; 第一步&#xff1a;分析执行结果不一致可能的原因&#xff1a; 1.测试数据问题&#xff0c;可能性小&…

『矩阵论笔记』中篇:张量CP分解的详细推导以及Python实现

中篇:张量CP分解的详细数学推导以及Python实现 文章目录 一. 张量的CP分解1.1. CP分解的表示1.2. 交替最小二乘法求解1.3. 交替最小二乘法Python代码1.4. 梯度下降法求解1.5. 梯度下降法Python代码二. 参考文献『矩阵论笔记』上篇:张量CP分解的详细数学推导以及Python实现『矩…

lv13 内核模板编译方法 7

1 内核模块基础代码解析 Linux内核的插件机制——内核模块 类似于浏览器、eclipse这些软件的插件开发&#xff0c;Linux提供了一种可以向正在运行的内核中插入新的代码段、在代码段不需要继续运行时也可以从内核中移除的机制&#xff0c;这个可以被插入、移除的代码段被称为内…

Vue3父组件props数据更新后,子组件视图未及时响应更新

问题描述&#xff1a; 在使用Vue3构建前端项目时&#xff0c;遇到了一个组件props数据更新后&#xff0c;子组件视图未及时响应更新的问题。具体表现为父组件向子组件传递的props数据发生变化&#xff0c;但在子组件中该props并未触发视图重新渲染。 分析问题&#xff1a; 在…

Python将普通图像转化为栅格影像

引言 本人研究的方向是遥感&#xff0c;研究了2年也搞没清楚普通图像和遥感影像的区别&#xff0c;只知道到了多了地理坐标信息&#xff0c;但是经纬度信息映射到每个图像像素点的底层逻辑我还不太理解。因为现在需要使用python将图像转化为栅格影像&#xff0c;所以在此仔细研…

排查 JVM 中的 OOM 问题详细指南

当 Java 应用程序抛出 OutOfMemoryError&#xff08;简称 OOM&#xff09;时&#xff0c;意味着 Java 虚拟机&#xff08;JVM&#xff09;在尝试为对象分配内存时没有足够的空间。这可能是由多种原因造成的&#xff0c;例如内存泄露、过大的垃圾收集开销、不恰当的堆大小设置等…

园林机械部件自动化三维测量检测形位公差-CASAIM自动化三维检测工作站

随着园林机械的广泛应用&#xff0c;对其机械部件的精确测量需求也日益增加。传统的测量方法不仅效率低下&#xff0c;而且精度难以保证&#xff0c;因此&#xff0c;自动化三维测量技术成为了解决这一问题的有效途径。本文将重点介绍CASAIM自动化三维检测工作站在园林机械部件…

Docker 数据持久化的三种方式

-v ${local_path}:${docker_path} Docker提供了三种不同的方式将数据从宿主机挂载到容器中&#xff1a;volume、bind mounts、tmpfs mounts volume&#xff1a;Docker管理宿主机文件系统的一部分&#xff08;/var/lib/docker/volumes&#xff09; bind mounts&#xff1a;可…

51系列--拨码开关编码控制的数码管显示设计

本文介绍基于51单片机的拨码开关编码控制的数码管显示设计&#xff08;完整Proteus仿真源文件及C代码见文末链接&#xff09; 一、系统及功能介绍 本设计主控芯片选用51单片机&#xff0c;主要实现拨码开关开关不同组合的数值在4位数码管上显示出来&#xff0c;拨码开关一共是…

关于Sql数据库中去掉字段的所有空格

这篇文章主要介绍了Sql数据库中去掉字段的所有空格小结篇,本文通过示例代码给大家介绍的非常详细&#xff0c;对大家的学习或工作具有一定的参考借鉴价值&#xff0c;需要的朋友可以参考下 − Sql数据库中去掉字段的所有空格 字符前的空格&#xff0c;用ltrim(string) 字符…

机器学习的一般步骤

机器学习专注于让机器从大量的数据中模拟人类思考和归纳总结的过程&#xff0c;获得计算模型并自动判断和推测相应的输出结果。机器学习的一般步骤可以概括为以下几个阶段&#xff1a; 数据收集和准备&#xff1a; 收集与问题相关的数据&#xff0c;并确保数据的质量和完整性。…

微服务全链路灰度方案介绍

目录 一、单体架构下的服务发布 1.1 蓝绿发布 二、微服务架构下的服务发布 三、微服务场景下服务发布的问题 四、全链路灰度解决方案 4.1 物理环境隔离 4.2 逻辑环境隔离 4.3 全链路灰度方案实现技术 4.3.1 标签路由 4.3.2 节点打标 4.3.3 流量染色 4.3.4 分布式链路…

【温故而知新】vue修饰符有哪些

一、前言 Vue修饰符是一种用于改变Vue指令行为的特殊后缀,用于指示指令应该如何工作。 二、修饰符主要有哪几类 Vue修饰符可以根据其功能分为以下几类: 事件修饰符(Event Modifiers):用于改变事件指令的行为。常见的事件修饰符包括.prevent、.stop、.self、.capture、.…

java美容管理系统Myeclipse开发mysql数据库web结构java编程计算机网页项目

一、源码特点 java Web美容管理系统是一套完善的java web信息管理系统&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为 TOMCAT7.0,Myeclipse8.5开发&#xff0c;数据库为Mysql5.0&…

子网掩码与IP段计算

一.什么叫子网掩码&#xff1a; 子网掩码(subnet mask)又叫网络掩码、地址掩码、子网络遮罩&#xff0c;它用来指明一个IP地址的哪些位标识的是主机所在的子网&#xff0c;以及哪些位标识的是主机的位掩码。子网掩码不能单独存在&#xff0c;它必须结合IP地址一起使用。 子网掩…

【源码】-MyBatis-如何系统地看源码

写在前面 前段时间做过一个项目&#xff0c;期间用到了动态数据源dynamic-datasource&#xff0c;经历了dbcp2的数据库连接池没有生效到排查定位、MyBatis多种数据库产品兼容、手写MyBatis拦截器等事情。 花费了好久&#xff0c;一直在打磨这篇文章&#xff08;不知道花费这么长…

光电耦合器:什么是隔离放大器

隔离放大器是现代电子系统中的关键组件&#xff0c;在维持信号完整性和确保敏感设备的安全方面发挥着关键作用。隔离放大器采用的关键技术之一是光耦合器&#xff0c;这是一种设计用于传输信号同时电隔离输入和输出电路的器件。在本文中&#xff0c;我们深入研究隔离放大器领域…