当前位置: 首页 > news >正文

免费网站推广ymdir网站建设 齐鲁软件园

免费网站推广ymdir,网站建设 齐鲁软件园,网站开发与设计开题报告,哪些网站需要备案目录 前言正文一、理论介绍1、QPointer2、QScopedPoint3、QSharedPoint4、QWeakPoint 二、实战演练1、QPoint2、QScopedPoint3、QSharedPointa、示例一b、示例二 4、QWeakPoint END、总结的知识与问题 参考 前言 智能指针的使用#xff0c;对很多程序员来说#xff0c;都算是… 目录 前言正文一、理论介绍1、QPointer2、QScopedPoint3、QSharedPoint4、QWeakPoint 二、实战演练1、QPoint2、QScopedPoint3、QSharedPointa、示例一b、示例二 4、QWeakPoint END、总结的知识与问题 参考 前言 智能指针的使用对很多程序员来说都算是比较高深的存在但又老是感觉这是一个值得去掌握且需要去掌握的东西所以这次下定决心来掌握一下Qt的智能指针的使用当然最常用的肯定是QSharedPoint这个了其他的应该也就是顺带着讲一讲并且普及一些知识从而让自己的能力更上一层楼把。 正文 一、理论介绍 1、QPointer QPointer是Qt提供的空安全的智能指针它用于解决悬挂指针的问题。QPoint在对象被删除后会自动被设置为nullptr,避免访问已经无效的对象它类似于普通指针但提供了一些安全检查。 总结来说就是: 当你创建一个对象然后使用QPointer指向这个对象若出现delete 了那个对象但是未将那个对象置空的情况的话判断的时候直接判断QPointer对象就可以知道到底是真的删除了那个对象还是假的删除了。避免了悬挂指针的问题。 QPoint 充当一个管家的角色对真正的指针做好判断。 2、QScopedPoint QScopedPoint 是Qt提供的独占式的智能指针用于管理动态分配的对象QScopedPoint 在超出作用域时自动删除对象确保对象在不再需要时被正确释放。 3、QSharedPoint QSharedPoint 是Qt提供的共享引用计数的指针可用于管理动态分配的对象。它通过引用计数跟踪对象的引用次数当引用次数归零时会自动删除对象。可以通过多个QSharedPoint共享同一个对象对象会在最后一个引用者释放它时才会被删除。 4、QWeakPoint QWeakPoint 是Qt提供的弱引用智能指针用于解决循环引用的问题。QWeakPoint 可以引用由QSharedPoint管理的对象但不会增加引用计数的次数。QWeakPoint需要转换成QSharedPoint才能访问对象当引用计数为0时访问会失败。 二、实战演练 1、QPoint MyClass.h #ifndef MYCLASS_H #define MYCLASS_H #include QPointer #include QDebug class MyClass : public QObject {Q_OBJECTpublic:MyClass(const QString name): m_name(name){qDebug() MyClass 构造函数名称为:m_name;}~MyClass(){qDebug() MyClass 析构函数名称为:m_name;}QString getName() const {return m_name;}private:QString m_name; };#endif // MYCLASS_H main.cpp #include QCoreApplication #include QPointer #include QDebug #include MyClass.hint main(int argc, char *argv[]) {QCoreApplication a(argc, argv);MyClass *obj new MyClass(test);QPointerMyClass myObject(obj);if (myObject){qDebug() 对象存在名称为 myObject-getName();}else{qDebug() 对象不存在;}delete obj;if (myObject){qDebug() 对象存在名称为 myObject-getName();}else{qDebug() 对象不存在;}return a.exec(); }2、QScopedPoint void MainWindow::TestQScopedPointer() {useResource();qDebug() useResource 函数执行完毕; }void MainWindow::useResource() {QScopedPointerResource scopedResource(new Resource());;//执行一些操作使用资源qDebug() --- 使用资源 ; }QScopedPoint 在适当的时候会自动调用析构函数释放资源。 结果 Resource 构造函数 --- 使用资源 Resource 析构函数 useResource 函数执行完毕3、QSharedPoint a、示例一 #include QSharedPointer #include QScopedPointer #include QDebug // 假设的图形对象类 class GraphicObject { public:GraphicObject() { qDebug() GraphicObject created; }~GraphicObject() { qDebug() GraphicObject destroyed; }// 具体的图形对象操作 }; // 文档对象类 class Document { public:Document() { qDebug() Document created; }~Document() { qDebug() Document destroyed; }// 添加图形对象到文档void addGraphicObject(QSharedPointerGraphicObject graphicObject) {graphicObjects.append(graphicObject);}// 具体的文档操作 private:QListQSharedPointerGraphicObject graphicObjects; }; int main() {// 使用 QSharedPointer 确保图形对象的自动释放QSharedPointerGraphicObject graphicObject(new GraphicObject);// 使用 QScopedPointer 确保文档对象的自动释放QScopedPointerDocument document(new Document);// 将图形对象添加到文档document-addGraphicObject(graphicObject);// 注意在这里graphicObject 和 document 会在适当的时候自动释放return 0; } b、示例二 #ifndef MYSHAREDCLASS_H #define MYSHAREDCLASS_H #include QPointer #include QDebug class MySharedClass : public QObject {Q_OBJECTpublic:MySharedClass(int value): m_iValue(value){qDebug() MySharedClass 构造函数值为:m_iValue;}~MySharedClass(){qDebug() MySharedClass 析构函数值为:m_iValue;}void setValue(int value){m_iValue value;}int getValue() const{return m_iValue;}private:QString m_name;int m_iValue; }; #endif // MYSHAREDCLASS_H void MainWindow::TestSharedPointer() {//先用一个智能指针指向一个对象QSharedPointerMySharedClass pointer1(new MySharedClass(10));{//通过复制构造函数 让引用1QSharedPointerMySharedClass pointer2 pointer1;qDebug() --- pointer1 的值:pointer1-getValue();qDebug() --- pointer2 的值pointer2-getValue();//实际上都是对同一个对象进行操作pointer2-setValue(20);qDebug() ---w pointer1 的值:pointer1-getValue();qDebug() ---w pointer2 的值pointer2-getValue();}qDebug() ---w pointer1 的值:pointer1-getValue();//之后智能指针超出作用域之后会自动析构掉 }4、QWeakPoint #ifndef MYWEAKCLASS_H #define MYWEAKCLASS_H#include QSharedPointer #include QWeakPointer #include QDebugclass ObjectB;class ObjectA { public:ObjectA(const QString name) : m_name(name){}~ObjectA(){qDebug() objectA 析构函数名称为:m_name;}void setObjectB(const QSharedPointerObjectB objectB){m_objectB objectB;} private:QString m_name;QWeakPointerObjectB m_objectB; };class ObjectB { public:ObjectB(const QString name): m_name(name){}~ObjectB(){qDebug() Object 析构函数名称为:m_name;}void setObjectA(const QSharedPointerObjectA objectA){m_objectA objectA;}private:QString m_name;QSharedPointerObjectA m_objectA; };#endif // MYWEAKCLASS_H void MainWindow::TestWeakPointer() {QSharedPointerObjectA objectA(new ObjectA(ObjectA));QSharedPointerObjectB objectB(new ObjectB(ObjectB));objectA-setObjectB(objectB);objectB-setObjectA(objectA);qDebug() 程序结束; }END、总结的知识与问题 参考 1、[Qt杂谈8.浅谈Qt智能指针那些事](https://www.cnblogs.com/luoxiang/p/17927569.html)
http://www.hkea.cn/news/14552117/

相关文章:

  • 传媒建站推荐游戏ui设计师网站有哪些
  • 上海软件网站建设网站模板建设教程
  • 企业销售型网站是什么做产品网站建设
  • 成都 网站建设公司wordpress 搜索框代码
  • 电子商务网站建设培训小结安顺市网站建设
  • 陇南网站设计优化软件是什么意思
  • 门户网站导航建设方案广州微信网站建设公司哪家好
  • 网站为什么需要空间新手学做网站难吗
  • 个人网站设计流程图帮做图标的网站
  • 门户网站建设方案是什么意思wordpress文章页面修改
  • 上海市建设工程材料网站收录很快的推广网站
  • 校园网站建设 必要性分析泉州专业网站开发公司
  • 宁波网站建设哪里有自助 建站
  • 专业网站设计公司和普通设计公司的区别Wordpress获取自定义分类
  • 网站建设前期策划网易游戏
  • 宁德企业网站建设网络营销的主要方法
  • 建设微信商城网站没有任何收录的网站做SEM有用吗
  • 为什么网站建设要值班深圳营销型网站设计公司
  • t型布局网站怎么做苏州微信小程序开发公司
  • 购物网站开发的意义一个网站3个相似域名
  • 成年做羞羞的视频网站space建设工程施工合同属于
  • 什么职位做网站网络组建考试题
  • 兰山做网站中国软件
  • 怎样在自己的网站上家程序wordpress数据写入数据库表
  • 淘宝做网站的公司wordpress 模版不能更新
  • 温州网站关键词商标做网站logo
  • 音频文件放到网站空间里生成链接怎么做百度重庆营销中心
  • 做一个简单的网站需要多少钱用户界面设计与制作
  • 网站ftp上传到空间做设计的几种网站
  • 校园网站建设与应用网站建设兆金手指科杰