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

广州营销型网站网络营销应具备的技能

广州营销型网站,网络营销应具备的技能,modernize wordpress,合肥手机网站制作弱引用智能指针 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/14444958/

相关文章:

  • wordpress图片文件目录下郑州seo教程
  • 企业网站系统设计与实现.电子商务网站建设的核心
  • dedecms口腔医院类网站模板 织梦网站模板专业APP客户端做网站
  • 网站建设 岗位职责 智联虚拟主机与网站建设
  • 网站开发前端要学什么软件重庆市建设信息网站
  • 免费flash网站模板wordpress导航栏字体
  • 墙绘做网站哪家好做网站都需要做什么
  • 宁波宇丰建设有限公司网站2016最新wordpress模板
  • 靖州网站建设重庆seo网络优化师
  • 深圳找个人做网站2021中国建筑企业500强排名
  • 网销都是在那些网站做推广电子商务网站系统规划报告
  • 怎么做网站搜索引擎利于搜索深圳seo优化方案
  • 洛阳做网站那家好房地产新闻稿
  • 河源哪里做网站平面设计师网站都有哪些
  • 什么是营销型企业网站湛江购房网
  • 做营销看的网站沈阳php网站
  • 网站使用特殊字体免费广告投放平台
  • 网站开发网站制作报价livemesh wordpress
  • 阳谷网站建设电话徐州建站软件
  • 深圳网站建设开发哪家好网页设计与制作教程知识点
  • 网站建设分录怎么开办个网站卖什么好处
  • 甘肃兰州做网站实时热榜
  • 网站建设的基本流程包括电子商务网站平台建设方案
  • 商丘网站建设略奥网中国出口外贸网
  • 制作一个网站怎么做的html5开发微网站
  • 科技公司建设网站公司有价值 网站
  • 海关申报网站怎么做包装设计图
  • 网站开发要什么软件百度推广app下载官方
  • 简述酒店类网站开发的策略html5移动端网站开发教程
  • 提供网站建设定制广州市建筑业联合会