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

2017年免费建网站教育机构的域名

2017年免费建网站,教育机构的域名,做自主外贸网站和后台费用多少,搭建一个商城类网站弱引用指针weak_ptr是用来监视shared_ptr的#xff0c;不会使引用计数器加1#xff0c;它不管理shared_ptr内部的指针#xff0c;主要是为了监视shared_ptr的生命周期#xff0c;更像是shared_ptr的一个助手。weak_ptr没有重载操作符*和-#xff0c;因为它不共享指针不会使引用计数器加1它不管理shared_ptr内部的指针主要是为了监视shared_ptr的生命周期更像是shared_ptr的一个助手。weak_ptr没有重载操作符*和-因为它不共享指针不能操作资源主要是为了通过shared_ptr获得资源的监测权它的构造函数不会增加引用计数它的析构不会减少引用计数纯粹只是作为一个旁观者来监视shared_ptr中管理的资源是否存在。weak_ptr还可以用来返回this指针和解决循环引用的问题。 weak_ptr基本用法 1、通过use_count()方法来获得当前观测资源的引用计数代码如下 #include memory #include iostream using namespace std;int main() {shared_ptrint sp(new int(1));weak_ptrint wp(sp);///输出1cout sp.use_count() endl;///输出1cout wp.use_count() endl;shared_ptrint sp2(new int(2));sp2 sp;///输出2cout sp.use_count() endl;return 0; } 2、通过expired()方法来判断所检测的资源是否已经被释放代码如下 #include memory #include iostream using namespace std;int main() {shared_ptrint sp(new int(1));weak_ptrint wp(sp);if (wp.expired()){cout weak_ptr无效所监视的智能指针被释放 endl;}else{cout weak_ptr 有效 endl;}return 0; } 3、通过lock方法来获取所监视的shared_ptr代码如下 #include memory #include iostream using namespace std;std::weak_ptrint gw;void f() {if (gw.expired()) ///所监听的shared_ptr是否被释放{cout gw is exipired endl;}else{auto spt gw.lock();cout *spt endl;} }int main() {{shared_ptrint sp(new int(1));gw sp;f();}f();return 0; } 输出如下 1 gw is expired weak_ptr返回this指针 不能直接将this指针返回为shared_ptr需要通过派生std::enable_shared_from_this类并通过其方法shared_from_this来返回智能指针原因是std::enable_shared_from_this类中有一个weak_ptr这个weak_ptr用来观测this指针调用shared_from_this()方法时会调用内部这个weak_ptr的lock()方法将所观测的shared_ptr返回看下面代码 #include memory #include iostream #include string #include string.h using namespace std;struct A : public std::enable_shared_from_thisA {shared_ptrA GetSelf(){return shared_from_this();}///析构函数调用了1次~A(){cout delete A endl;} };int main() {shared_ptrA sp1(new A);shared_ptrA sp2 sp1-GetSelf();return 0; } 输出结果如下 deleted A 在外面创建A对象的智能指针和通过该对象返回this的智能指针都是安全的因此shared_from_this是内部的weak_ptr调用lock()方法之后返回的智能指针在离开作用域之后sp1的引用计数减为0A对象会被析构不会出现A对象被析构两次的问题。 weak_ptr解决循环引用问题 智能指针的循环引用会导致内存泄漏问题请看下面的代码 #include memory #include iostream #include string #include string.h using namespace std;struct A; struct B;struct A {std::shared_ptrB bptr;~A(){cout A is deleted endl;} };struct B {std::shared_ptrA aptr;~B(){cout B is deleted endl;} };int main() {{///析构函数没有被调用shared_ptrA ap(new A);shared_ptrB bp(new B);ap-bptr bp;bp-aptr ap;///引用计数为2cout ap use_count: ap.use_count() endl;cout bp use_count: bp.use_count() endl;}return 0; } 在这个例子中由于循环引用导致ap和bp的引用计数都为2离开作用域之后引用计数减为1不会去删除指针导致内存泄漏。通过weak_ptr就可以解决这个问题只要将A或者B的任意一个成员变量改为weak_ptr即可。 struct A; struct B;struct A {std::shared_ptrB bptr;~A(){cout A is deleted endl;} };struct B {std::weak_ptrA aptr;~B(){cout B is deleted endl;} };int main() {{shared_ptrA ap(new A);shared_ptrB bp(new B);ap-bptr bp;bp-aptr ap;///引用计数为1cout ap use_count: ap.use_count() endl;cout bp use_count: bp.use_count() endl;}return 0; } 输出如下 ap use_count: 1 bp use_count: 2 A is deleted B is deleted 这样在对B的成员赋值时即执行bp-aptr ap;时由于aptr是weak_ptr它并不会增加引用计数所以ap的引用计数仍然会是1在离开作用域之后ap的引用计数会减少为0A指针会被析构析构后其内部的ptr的引用计数为减为1然后再离开作用域后bp引用计数又从1减到0B对象也会被析构不会发生内存泄漏。
http://www.pierceye.com/news/460598/

相关文章:

  • 宣城市建设监督管理局网站下载怎么上wordpress
  • 福州做网站fjfzwl编写软件开发文档
  • 平台设计网站公司电话号码建站哪家好用兴田德润
  • 宝安网站建设信科免费网站开发 自动填写表单
  • 网站怎么更新文章动漫网站在线免费观看
  • 织梦 网站迁移网页制作三剑客通常指
  • 南京本地网站建站武安百度seo
  • 特定ip段访问网站代码西安免费建网站设计
  • 个人网站备案取消wordpress可以做大吗
  • 如何做网站管理网站服务器基本配置
  • 做网站需要参考书目书龙岩营销型网站建设
  • 南通网站建设解决方案求助如何做网站推广
  • 揭阳企业做网站淮安做网站
  • 怎么给餐饮店做网站用织梦做企业网站
  • 技术支持 创思佳网站建设如何制作自己的网站
  • 济南网站建设公司晟创未来wordpress xml插件
  • 前端做商城网站需要多久实训课网站开发个人小结
  • 南宁网站seo排名优化手机网站制作架构
  • 亿唐网不做网站做品牌案例分析seo 推广服务
  • 深圳网站建设服务器如何编写一份网站开发需求文档
  • 营销网站策划wordpress主题在线汉化插件下载
  • 深圳市网站开发个人养老保险金怎么交
  • 超炫html5网站模板新手做网站怎么上传系统
  • 一个网站的二级目录在另一台服务器上_怎么做网络营销工程师前景
  • 个人网站推广软件企业网站建设变相收取等级保护费6
  • 有没有一些网站可以做问卷个人网站 服务器
  • 网站前端WordPress怎么自定义页眉
  • 常州企业免费建站秦皇岛市住房公积金管理中心
  • 网站建设网站需要什么软件有哪些使用wordpress开发一个页面
  • 贵溪市城乡建设局网站手机网站推荐