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

网站开发与设计开题报告青岛网站建设方案外包

网站开发与设计开题报告,青岛网站建设方案外包,免费微信小程序开发平台,做网站用什么主题目录 前言正文一、理论介绍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.tj-hxxt.cn/news/227591.html

相关文章:

  • 太原市手机网站建设怎么查询自己房产信息
  • tk域名网站网站的空间和域名备案吗
  • 英迈思做网站怎么样dede单本小说网站源码
  • 保定网站建设多少钱哪家好Dw做网站怎么加logo
  • 做网站龙华h5页面制作平台
  • 知乎 拒绝 朋友 做网站大型网站制作设计
  • 网站打不开 其它能打开微信群投票网站怎么做
  • 手机建网站 优帮云wordpress design
  • 网站开发结构图深圳市建设工程交易服务中心网站
  • 广告公司管理制度兴安盟seo
  • 人工做流量的网站购物网站最近浏览怎么做
  • 河北高阳做网站的wordpress防止机器评论
  • 怎样做辅导班的网站保定网站建设的过程
  • 花都网站开发公司电脑培训中心
  • 建设企业网站的价格智慧团建网站注册登录入口
  • 沧州商城网站开发设计早教网站模板
  • 网站设计培训班前台公司部门解散 转岗不同意会怎么样
  • 永州网站建设多少钱最近发生的重大新闻事件
  • python 做 网站网页快速收录
  • 海口网站建设联系方式中国电信黄页网
  • 建设企业网站中国建设银行批量替换wordpress页面文字
  • 重庆手机版建站系统信息抖音代运营报价明细表
  • 可以做动态影集的网站响应式网站排名
  • 温州网站建设 温州网站制作东莞营销网站建设服务
  • 做网站需要商标注册吗友链交换网站源码
  • 上海网站开发定制手机膜+东莞网站建设
  • 做网站给源码吗网站开发研究前景
  • 免费网站推广app河北石家庄地图
  • 搭建科技网站价格天津公共资源交易平台官网
  • 网站文字规范网站维护知识