当前位置: 首页 > news >正文 商务网站制作工程师无需下载直接登录qq手机版 news 2025/10/26 11:23:56 商务网站制作工程师,无需下载直接登录qq手机版,中国建设银行信用卡网站首页,微信公众号链接的网站怎么做一.概述 Qt智能指针是一种能够在不需要手动管理内存的情况下#xff0c;自动释放资源的指针。它们是C11的std::shared_ptr的一种扩展#xff0c;可以用于管理Qt对象#xff0c;尤其是那些不是QObject的对象。 使用智能指针可以避免内存泄露和悬垂指针等问题#xff0c;同时…一.概述 Qt智能指针是一种能够在不需要手动管理内存的情况下自动释放资源的指针。它们是C11的std::shared_ptr的一种扩展可以用于管理Qt对象尤其是那些不是QObject的对象。 使用智能指针可以避免内存泄露和悬垂指针等问题同时也提高了代码的可读性和可维护性。 1.Qt框架提供了几种智能指针 QSharedPointer 这是一个引用计数式智能指针允许多个指针共享同一个对象的所有权。当最后一个QSharedPointer被销毁或重置时它所指向的对象才会被删除。 适用于需要在多个地方共享同一个对象的场景。 QWeakPointer 这是一个弱引用智能指针指向由QSharedPointer管理的对象但不会增加对象的引用计数。 如果被观察的对象即QSharedPointer所管理的对象已经被释放QWeakPointer将自动被设置为nullptr。 适用于需要观察但不拥有QSharedPointer所管理对象的场景。 QScopedPointer 这是一个独占式智能指针确保它所指向的对象在其生命周期内始终存在并在QScopedPointer对象被销毁时自动删除其所指向的对象。 适用于那些不应该被多个所有者共享的资源。 QPointer QPointer是一个观察者指针用于观察QObject及其子类的生命周期。它不会增加对象的引用计数当QObject对象被删除时QPointer会自动设置为nullptr。 需要注意的是QPointer只能指向QObject或其子类的对象。 每种智能指针都有其特定的使用场景和优势开发者应根据具体需求选择合适的智能指针类型。使用智能指针可以有效地避免内存泄漏和悬垂指针等问题提高代码的安全性和稳定性。 二.代码示例 1.QPointer QPointer是一个被保护的指针行为类似于普通的c指针T *会在被引用的对象被销毁时自动清除(不像普通的C指针在这种情况下会成为“悬空指针”)。但是T必须是QObject的子类否则将导致编译失败或链接错误。 QPointerQLabel label new QLabel; label-setText(Status:); ... if (label) label-show(); 如果QLabel在此期间被删除label变量将保存nullptr而不是一个无效的地址最后一行将永远不会执行。 2.QScopedPointer 在Qt中实现线程安全的单例模式时QScopedPointer 比较常用。 使用 QScopedPointer 管理动态分配的内存时它会确保在包含该 QScopedPointer 的作用域结束时所管理的对象会被自动释放从而避免内存泄漏的问题。下面是一个示例 #include QScopedPointer #include QDebug class Resource { public: Resource() { qDebug() Resource 构造函数; } ~Resource() { qDebug() Resource 析构函数; } }; void useResource() { QScopedPointerResource scopedResource(new Resource()); // 执行一些操作使用资源 qDebug() 使用资源...; } int main() { useResource(); qDebug() useResource 函数执行完毕; return 0; } 如上创建了一个名为 Resource 的类并使用 QScopedPointer 在 useResource 函数内创建动态分配的 Resource 对象。当 useResource 函数结束时QScopedPointer 的析构函数会被调用并自动释放所管理的 Resource 对象。 3.QSharedPointer 特点 用于管理动态分配的对象的所有权和生命周期。 当存在至少一个 QSharedPointer 指向对象时对象的内存不会被释放。 当最后一个指向对象的 QSharedPointer 超出作用域时对象的内存会被释放。 可通过复制 QSharedPointer 来增加对象的引用计数确保对象在合适的时候被释放。 下面举个例子 #include QSharedPointer #include QDebug class MyClass { public: MyClass(int value) : m_value(value) { qDebug() MyClass 构造函数数值为 m_value; } ~MyClass() { qDebug() MyClass 析构函数数值为 m_value; } void setValue(int value) { m_value value; } int getValue() const { return m_value; } private: int m_value; }; int main() { QSharedPointerMyClass pointer1(new MyClass(10)); // 创建一个 QSharedPointer 智能指针用于管理 MyClass 对象 { QSharedPointerMyClass pointer2 pointer1; // 复制构造函数增加了 MyClass 对象的引用计数 qDebug() pointer1 的值为 pointer1-getValue(); qDebug() pointer2 的值为 pointer2-getValue(); pointer2-setValue(20); // 通过 pointer2 修改对象的值 qDebug() pointer1 的值为 pointer1-getValue(); qDebug() pointer2 的值为 pointer2-getValue(); } // pointer2 超出作用域减少了 MyClass 对象的引用计数 qDebug() pointer1 的值为 pointer1-getValue(); return 0; } 4.QWeakPointer 特点 用于解决 QSharedPointer 可能导致的循环引用问题。 不会增加对象的引用计数不影响对象的生命周期。 可以从 QSharedPointer 或者另一个 QWeakPointer 创建用于在需要时保持对对象的非拥有者式引用。 如果关联的 QSharedPointer 被释放QWeakPointer 会自动置空避免悬空指针问题。 这里重点说下循环引用当两个或多个对象彼此持有对方的强引用时就会形成循环引用。这种情况下对象无法被正常释放会导致内存泄漏。Qt 的 QWeakPointer 类是为了解决这个问题而引入的。 QWeakPointer 允许创建一个弱引用指向被QSharedPointer管理的对象但不会增加该对象的引用计数。弱引用不会阻止对象的销毁即使所有强引用都失效对象的析构函数也能被正确调用。 文章转载自: http://www.morning.duqianw.com.gov.cn.duqianw.com http://www.morning.ysqb.cn.gov.cn.ysqb.cn http://www.morning.hjwzpt.com.gov.cn.hjwzpt.com http://www.morning.wkqrp.cn.gov.cn.wkqrp.cn http://www.morning.snrhg.cn.gov.cn.snrhg.cn http://www.morning.yntsr.cn.gov.cn.yntsr.cn http://www.morning.fbbpj.cn.gov.cn.fbbpj.cn http://www.morning.tsqpd.cn.gov.cn.tsqpd.cn http://www.morning.hbxnb.cn.gov.cn.hbxnb.cn http://www.morning.cfjyr.cn.gov.cn.cfjyr.cn http://www.morning.dqrhz.cn.gov.cn.dqrhz.cn http://www.morning.ntqlz.cn.gov.cn.ntqlz.cn http://www.morning.tfpbm.cn.gov.cn.tfpbm.cn http://www.morning.lsjgh.cn.gov.cn.lsjgh.cn http://www.morning.tqxtx.cn.gov.cn.tqxtx.cn http://www.morning.kpcky.cn.gov.cn.kpcky.cn http://www.morning.rfwrn.cn.gov.cn.rfwrn.cn http://www.morning.rgyts.cn.gov.cn.rgyts.cn http://www.morning.tdldh.cn.gov.cn.tdldh.cn http://www.morning.zlrrj.cn.gov.cn.zlrrj.cn http://www.morning.prgrh.cn.gov.cn.prgrh.cn http://www.morning.yhdqq.cn.gov.cn.yhdqq.cn http://www.morning.pwqyd.cn.gov.cn.pwqyd.cn http://www.morning.srkzd.cn.gov.cn.srkzd.cn http://www.morning.wpsfc.cn.gov.cn.wpsfc.cn http://www.morning.tdxnz.cn.gov.cn.tdxnz.cn http://www.morning.qbxdt.cn.gov.cn.qbxdt.cn http://www.morning.ktlxk.cn.gov.cn.ktlxk.cn http://www.morning.wqkfm.cn.gov.cn.wqkfm.cn http://www.morning.kflzy.cn.gov.cn.kflzy.cn http://www.morning.xqbgm.cn.gov.cn.xqbgm.cn http://www.morning.ylklr.cn.gov.cn.ylklr.cn http://www.morning.xyjlh.cn.gov.cn.xyjlh.cn http://www.morning.ydhmt.cn.gov.cn.ydhmt.cn http://www.morning.bsqkt.cn.gov.cn.bsqkt.cn http://www.morning.qcslh.cn.gov.cn.qcslh.cn http://www.morning.cwkcq.cn.gov.cn.cwkcq.cn http://www.morning.wrysm.cn.gov.cn.wrysm.cn http://www.morning.tyhfz.cn.gov.cn.tyhfz.cn http://www.morning.cczrw.cn.gov.cn.cczrw.cn http://www.morning.kjjbz.cn.gov.cn.kjjbz.cn http://www.morning.snjpj.cn.gov.cn.snjpj.cn http://www.morning.tbqbd.cn.gov.cn.tbqbd.cn http://www.morning.tbhlc.cn.gov.cn.tbhlc.cn http://www.morning.ykwbx.cn.gov.cn.ykwbx.cn http://www.morning.qmzwl.cn.gov.cn.qmzwl.cn http://www.morning.fllfz.cn.gov.cn.fllfz.cn http://www.morning.lpbrp.cn.gov.cn.lpbrp.cn http://www.morning.nlpbh.cn.gov.cn.nlpbh.cn http://www.morning.cwqrj.cn.gov.cn.cwqrj.cn http://www.morning.ptmsk.cn.gov.cn.ptmsk.cn http://www.morning.brkc.cn.gov.cn.brkc.cn http://www.morning.cdygl.com.gov.cn.cdygl.com http://www.morning.nxfwf.cn.gov.cn.nxfwf.cn http://www.morning.beijingzy.com.cn.gov.cn.beijingzy.com.cn http://www.morning.rjmg.cn.gov.cn.rjmg.cn http://www.morning.ykmkz.cn.gov.cn.ykmkz.cn http://www.morning.c7617.cn.gov.cn.c7617.cn http://www.morning.mmzfl.cn.gov.cn.mmzfl.cn http://www.morning.bncrx.cn.gov.cn.bncrx.cn http://www.morning.brbmf.cn.gov.cn.brbmf.cn http://www.morning.rmyt.cn.gov.cn.rmyt.cn http://www.morning.fqmcc.cn.gov.cn.fqmcc.cn http://www.morning.lxjcr.cn.gov.cn.lxjcr.cn http://www.morning.qfwfj.cn.gov.cn.qfwfj.cn http://www.morning.hffpy.cn.gov.cn.hffpy.cn http://www.morning.lthtp.cn.gov.cn.lthtp.cn http://www.morning.ntgjm.cn.gov.cn.ntgjm.cn http://www.morning.kkjhj.cn.gov.cn.kkjhj.cn http://www.morning.jzfrl.cn.gov.cn.jzfrl.cn http://www.morning.zxwqt.cn.gov.cn.zxwqt.cn http://www.morning.wzwpz.cn.gov.cn.wzwpz.cn http://www.morning.qykxj.cn.gov.cn.qykxj.cn http://www.morning.fnfxp.cn.gov.cn.fnfxp.cn http://www.morning.jlschmy.com.gov.cn.jlschmy.com http://www.morning.rxhs.cn.gov.cn.rxhs.cn http://www.morning.zcnwg.cn.gov.cn.zcnwg.cn http://www.morning.phjyb.cn.gov.cn.phjyb.cn http://www.morning.fqssx.cn.gov.cn.fqssx.cn http://www.morning.hgscb.cn.gov.cn.hgscb.cn 查看全文 http://www.tj-hxxt.cn/news/250863.html 相关文章: 上海做原创网站互联网定制网站 安徽做手机网站国外做的好的医疗网站 壶关网站建设绍兴手机网站制作 青岛做网站哪个最好襄阳网站seo技巧 餐饮酒店网站建设wordpress djiango 太原网站建设最好喀什哪有做网站的 谷歌网站收录入口wordpress 首页分页 设计网官方网站网站建设狼雨 国外空间网站源码.net 网站开发 教程 门类细分网站杭州企业营销网站建设公司 显示网站目录军事新闻最新消息中国视频 一个企业网站建设需要多长时间青海网站建设公司哪家好 大型网站建设部署方案免费好用的云电脑 网站建设开发简介做网站加盟 2018年深圳建设网站公司网站后台修改的页面不能显示 建设网站招标文件辽宁建设厅证件查询网站 asp网站开发的开发环境网站制作致谢词 做网站需要多少费用简单大气网站 山东建设网站宁波高端网站设计价格 钦州浦北网站建设软文广告案例500字 门户网站开发源代码如何购买网站主机 做网站做地区好还是全国的好网站推广排名收费标准 phpstuy wordpress优化网站公司外包 住房和城乡建设部科技网站河北建设工程信息网官网入口 建设银行科技中心网站厦门市同安区建设工程质量安全监督站网站 东莞百度推广教程短视频seo询盘系统 培训中心网站建设论文dede网站 index.php无法访问 网站建设要学哪些软件中国企业500强2022 建设商务网站过程企业形象广告设计 外贸网站建设网站网上商城什么意思