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

网站模板flash网站备案 种类

网站模板flash,网站备案 种类,快速建立平台网站开发建站教程详解,地税城市维护建设税网站是什么意思弱引用智能指针 std::weak_ptr 可以看做是shared_ptr的助手,它不管理 shared_ptr 内部的指针。std::weak_ptr 没有重载操作符*和-#xff0c;因为它不共享指针#xff0c; 不能操作资源#xff0c;所以它的构造不会增加引用计数#xff0c;析构也不会减少引用计数,它的…弱引用智能指针 std::weak_ptr 可以看做是shared_ptr的助手,它不管理 shared_ptr 内部的指针。std::weak_ptr 没有重载操作符*和-因为它不共享指针 不能操作资源所以它的构造不会增加引用计数析构也不会减少引用计数,它的主要作用就是作为一个旁观者监视shared_ptr 中管理的资源是否存在. 初始化 #includeiostream #includememory using namespace std;int main(){shared_ptrint sp(new int);//weak_ptrint wp1;//空weak_ptr对象weak_ptrint wp2(wp1);//也是空weak_ptrint wp3(sp);//通过shared_ptr对象构造一个可用的weak_ptr实例对象就是wp3监管spweak_ptrint wp4;wp4sp;//通过shared_ptr对象构造一个可用的weak_ptr实例对象(这是一个隐式类型转换)给赋值运算符重载了weak_ptrint wp5;wp5wp3;//通过weak_ptr对象构造一个可用的weak_ptr实例对象给赋值运算符重载了 } use_count() 通过调用weak_ptr类提供的use_count()方法可以获得当前观测资源的引用计数 #includeiostream #includememory using namespace std; int main() { shared_ptrint sp(new int); weak_ptrint wp1; weak_ptrint wp2(wp1); weak_ptrint wp3(sp); weak_ptrint wp4; wp4 sp; weak_ptrint wp5; wp5 wp3; cout wp1.use_count() endl; cout wp2.use_count() endl; cout wp3.use_count() endl; cout wp4.use_count() endl; cout wp5.use_count() endl; }/*运行结果 0 0 1 1 1*/ 通过打印的结果可以知道虽然弱引用智能指针 wp3、wp4、wp5 监测的资源是同一个但是它的引用计数并没有发生任何的变化也进一步证明了 weak_ptr 只是监测资源并不管理资源。 expired()(失效的 通过调用 std::weak_ptr 类提供的 expired()方法来判断观测的资源是否已经被释放 #includeiostream #includememory using namespace std; int main() { shared_ptrint shared(new int(10)); weak_ptrint weak(shared); cout weak.expired() endl; shared.reset(); cout weak.expired() endl;return 0; } /*运行结果 0 1*/ weak_ptr监测的就是shared_ptr管理的资源当共享智能指针调用 shared.reset();之后管理的资源被释放因此 weak.expired()函数的结果返回 true表示监测的资源已经不存在了。 lock() 通过调用weak_ptr类提供的lock()方法来获取管理所监测资源的shared_ptr对象 #includeiostream #includememory using namespace std; int main() { shared_ptrint sp1, sp2; weak_ptrint wp; sp1 make_sharedint(520); wp sp1; sp2 wp.lock(); cout wp.use_count() endl; sp1.reset(); cout wp.use_count() endl; sp1 wp.lock(); cout wp.use_count() endl;cout *sp1 endl; cout *sp2 endl;return 0; }/*运行结果 2 1 2 520 520*/ sp2 wp.lock();通过调用 lock()方法得到一个用于管理 weak_ptr 对象所监测的资源的共享智能指针对象使用这个对象初始化 sp2此时所监测资源的引用计数为 2. sp1.reset();共亨智能指针 sp1 被重置,weak_ptr 对象所监测的资源的引用计数减 1 sp1 wp.lock();sp1 重新被初始化并且管理的还是 weak_ptr 对象所监测的资源因此引用计数加 1. 共享智能指针对象 sp1 和 sp2 管理的是同一块内存因此最终打印的内存中的结果是相同的,都是 520. reset() 通过调用 std::weak_ptr 类提供的 reset()方法来清空对象使其不监测任何资源。 #includeiostream #includememory using namespace std; int main() { shared_ptrint sp(new int(10)); weak_ptrint wp(sp); cout wp.expired() endl; wp.reset(); cout wp.expired() endl; cout sp.use_count() endl;return 0; }/*运行结果 0 1 1*/ 返回管理this的shared_ptr #includeiostream #includememory using namespace std;struct Test {shared_ptrTest getSharedPtr(){return shared_ptrTest(this); }~Test(){cout析构函数endl; } }; int main() {shared_ptrTest sp1(new Test);cout引用个数sp1.use_count()endl;shared_ptrTest sp2sp1-getSharedPtr();cout引用个数sp1.use_count()endl;return 0; } 当用Test的对象初始化sp1时sp1指向这个对象当sp1调用getSharedPtr函数时要给隐含参数this传值传的就是Test对象的原始地址这就会导致用原始地址初始化多次智能指针这俩智能指针各自维护着自己的引用计数当一个引用计数为0时就会释放那块空间而另一个指针不知道那块空间被释放会再次释放那块空间导致二次释放问题 通过输出的结果可以看到一个对象被析构了两次其原因是这样的:在这个例子中使用同一个指针 this 构造了两个智能指针对象 sp1 和 sp2这二者之间是没有任何关系的因为 sp2 并不是通过 sp1 初始化得到的实例对象。在离开作用域之后 this 将被构造的两个智能指针各自析构导致重复析构的错误。 循环引用 #includeiostream #includememory using namespace std;class A; class B; class A{ public:shared_ptrB bptr;~A(){coutA的析构endl; } }; class B{ public:shared_ptrA aptr;~B(){coutB的析构endl; } }; void testPtr(){shared_ptrA ap(new A);shared_ptrB bp(new B);coutA的引用计数ap.use_count()endl;coutB的引用计数bp.use_count()endl;ap-bptrbp;bp-aptrap;coutA的引用计数ap.use_count()endl;coutB的引用计数bp.use_count()endl; } int main(){testPtr();return 0; } 当作用域结束想要释放A对象就得让A对象里面的bptr引用计数为0但是aptr指向的是B只有B没有bptr引用计数才为0但是B里有个aptr只有aptr引用计数为0B才能没但是aptr指向的是A只有A没了aptr才能没这就导致两边都没不了ap和bp引用计数都不为0 要解决这个循环引用问题可以考虑使用weak_ptr弱指针来打破循环引用例如将类A中的shared_ptr改为weak_ptr类B中的shared_ptr改为weak_ptr这样就可以在需要访问对方对象时通过weak_ptr的lock方法来获取有效的shared_ptr同时又不会造成循环引用导致的析构函数无法调用的问题。
http://www.hkea.cn/news/14594490/

相关文章:

  • 网站建设企业资质蔬菜水果网站建设
  • 网站建设的需求目前网站开发怎么兼顾手机
  • 网站开发设计大赛如何看一个网站的好坏
  • 黄山网站建设推荐那个企业建网站好
  • 广东网站制作公司排名哪里有做网站的
  • 红木家具网站建设总体规划导航类的wordpress
  • 淘宝网站建设素材网站建设 视频教程
  • 怎么做qq可信任网站国家企业信用公示信息年报全国
  • 大连开发区规划建设局网站网站建设招聘信息
  • 怎么做网站搜索引擎利于搜索中英双语营销型网站
  • 客套企业名录搜索seo站长工具
  • 哈尔滨搜索引擎建站免费软件app有哪些
  • 旅游网网站建设方案模版做网站多少钱
  • 网站排名不稳定经典的网站设计工具
  • 自己录入数据做问卷的网站网站策划书是什么
  • 培训网站网站建设张掖网站建设
  • 电脑网络设计干什么的搜狗seo怎么做
  • 收费抽奖网站wordpress网店
  • 建个网站费用多少深圳建站推广
  • 北京好用的h5建站上海市建设考核中心网站
  • 西安市城乡建设网官方网站青岛seo用户体验
  • 怎么介绍自己做的企业网站页面怎么改网站上的logo
  • 网站模板 wordpress带会员系统无锡专业网站
  • 网站关键词添加多少个新浪博客怎么给自己网站做链接
  • 厦门中科做网站总打电话来wordpress博客群发
  • 网站被挂马 301亚马逊雨林动物
  • 做网站 万户网站设计之路
  • 做旅游网站需要引进哪些技术人才网站建设自查及整改报告
  • 怎么知道一个网站是哪家公司做的wordpress所有分类
  • 做证券考试的网站怎么学习网站建设