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

做logo那个网站搜狗seo刷排名软件

做logo那个网站,搜狗seo刷排名软件,黔江做网站,五金配件网站建设报价shared_ptr shared_ptr继承自__shared_ptr,其中有两个对象,一个是指向资源的指针,一个是控制块,指向一个引用计数对象。控制块中存储了强引用和弱引用的计数,强引用Uses代表shared_ptr对象的引用计数,弱引…

shared_ptr

shared_ptr继承自__shared_ptr,其中有两个对象,一个是指向资源的指针,一个是控制块,指向一个引用计数对象。控制块中存储了强引用和弱引用的计数,强引用Uses代表shared_ptr对象的引用计数,弱引用Weaks代表weak_ptr对象的引用计数。
在这里插入图片描述
大概结构如上图所示,控制块其中也存储了指向资源的指针。
因此在构造一个shared_ptr对象的时候,会有两次堆分配,一次是为资源分配,一次是为控制块分配。因为每一个指向这份资源的指针对象都需要看到同一份引用计数,因此跟资源一样也是堆分配的。多次的堆分配和释放也就代表效率上的损失,而且极易产生内存碎片。

make_shared

C++11同时提供了make_shared函数,这是通过构造一个shared_ptr对象,而这个对象会事先申请一块足够大的内存空间,用于存放管理的资源以及控制块。即分配的堆空间是连续的,因此只有一次堆内存分配。

在这里插入图片描述
内存的结构就从左边的构造shared_ptr对象到右边的重构对象资源指针和引用计数。
相比shared_ptr构造,减少一次内存分配,提高效率,并且内存空间连续,减少内存碎片产生。但是,make_shared也存在缺点。

make_shared的缺点

自定义deleter

make_shared在构造智能指针对象的时候不能自定义deleter。在创建对象时同时创建控制块,这个控制块内部包含了引用计数、deleter等与管理资源相关的信息。因为资源和控制块是属于同一块申请的内存,所以使用自定义deleter可能会导致控制块内存被不正确地释放。因此,如果要使用deleter,应该使用shared_ptr直接构造。

构造函数

因为make_shared需要用到类的拷贝构造,因此需要被管理的类的构造函数是public的。

内存延迟归还

因为分配的空间是连续的,在资源指针的Uses变为0之后,控制块伴随资源的资源不会被立即释放,要等Weak也变为0,整块内存才被释放。资源只是被clear,但是但是没有归还操作系统。而如果是默认的控制块,在资源指针的Uses变为0之后,资源会被立即释放,内存立即归还。

通过调试看直接构造和make_shared的区别

void test2()
{std::shared_ptr<string> p1 = std::make_shared<std::string>(10, '9');{std::weak_ptr<std::string> wptr1;wptr1 = p1;std::shared_ptr<string> p2 = std::make_shared<std::string>("Hello");wptr1 = p2;p2 = p1;}std::cout << "end";
}void test1()
{std::shared_ptr<string> p1 = std::shared_ptr<std::string>(new std::string(10, '9'));{std::weak_ptr<std::string> wptr1;wptr1 = p1;std::shared_ptr<string> p2 = std::shared_ptr<std::string>(new std::string("Hello"));wptr1 = p2;p2 = p1;}std::cout << "end";
}int main()
{test1();test2();return 0;
}

直接构造在这里插入图片描述

当wptr指向p1的时候,可以看到p1的Weaks变为了2,weak_ptr观察到的内容与p1一致。并且注意此时control block的value显示为default,表示默认的控制块。
在这里插入图片描述
当weak_ptr指向p2,并且将p2指向p1,意思就是p2原来管理的Hello资源要释放掉,然后用p1拷贝构造一个对象,赋值给p2,让p1和p2同时管理10个9。
此时可以看到weak_ptr的资源指针已经显示Error reading,说明资源已经释放,内存已经归还了。

make_shared构造

在这里插入图片描述
此时可以看到原来为default的control block已经改为了make_shared。
在这里插入图片描述
重复之前的操作,把p2指向p1,再看weak_ptr的成员。可以看到ptr指向的资源并没有被释放,只是内容并清空而已。只有当weak_ptr的生命周期结束,整个内存块才会被释放,归还给操作系统。
这就是make_shared最主要的缺点,在某些内存要求高的场景下可能不太适用。


文章转载自:
http://deformity.kryr.cn
http://zechin.kryr.cn
http://stoneware.kryr.cn
http://rhyparographist.kryr.cn
http://octoploid.kryr.cn
http://exarteritis.kryr.cn
http://contrasuggestible.kryr.cn
http://immunodiffusion.kryr.cn
http://lymphosarcoma.kryr.cn
http://extinct.kryr.cn
http://aerophobia.kryr.cn
http://bobby.kryr.cn
http://karachi.kryr.cn
http://afoul.kryr.cn
http://nearby.kryr.cn
http://unfashionable.kryr.cn
http://immoral.kryr.cn
http://adonai.kryr.cn
http://acetin.kryr.cn
http://populate.kryr.cn
http://iodide.kryr.cn
http://totemism.kryr.cn
http://ichthyotoxism.kryr.cn
http://remissive.kryr.cn
http://tasmanian.kryr.cn
http://homoplasy.kryr.cn
http://semiautonomous.kryr.cn
http://americanologist.kryr.cn
http://roof.kryr.cn
http://nullipennate.kryr.cn
http://wirehaired.kryr.cn
http://manstopper.kryr.cn
http://knickerbockers.kryr.cn
http://defenceless.kryr.cn
http://antecedent.kryr.cn
http://stammrel.kryr.cn
http://sunshine.kryr.cn
http://sins.kryr.cn
http://subproblem.kryr.cn
http://trappy.kryr.cn
http://befriend.kryr.cn
http://mousaka.kryr.cn
http://zeldovich.kryr.cn
http://daf.kryr.cn
http://purport.kryr.cn
http://hardicanute.kryr.cn
http://irdome.kryr.cn
http://encapsule.kryr.cn
http://helicograph.kryr.cn
http://lomentaceous.kryr.cn
http://osmose.kryr.cn
http://salivation.kryr.cn
http://chapeau.kryr.cn
http://inscroll.kryr.cn
http://fortunehunting.kryr.cn
http://ontologize.kryr.cn
http://reversioner.kryr.cn
http://underpan.kryr.cn
http://raucous.kryr.cn
http://crus.kryr.cn
http://battlemented.kryr.cn
http://refire.kryr.cn
http://thick.kryr.cn
http://yangon.kryr.cn
http://rodlet.kryr.cn
http://polymethyl.kryr.cn
http://mordecai.kryr.cn
http://achalasia.kryr.cn
http://immit.kryr.cn
http://inscriptive.kryr.cn
http://codiscoverer.kryr.cn
http://unimproved.kryr.cn
http://udt.kryr.cn
http://nipponian.kryr.cn
http://refined.kryr.cn
http://imageless.kryr.cn
http://kroon.kryr.cn
http://applicator.kryr.cn
http://millennia.kryr.cn
http://prospero.kryr.cn
http://viyella.kryr.cn
http://wrackful.kryr.cn
http://dukhobors.kryr.cn
http://billycock.kryr.cn
http://waggery.kryr.cn
http://fortran.kryr.cn
http://kentish.kryr.cn
http://preprocess.kryr.cn
http://achaian.kryr.cn
http://mower.kryr.cn
http://tictac.kryr.cn
http://inter.kryr.cn
http://dagwood.kryr.cn
http://phosphorolysis.kryr.cn
http://ravishing.kryr.cn
http://deraign.kryr.cn
http://electroless.kryr.cn
http://babassu.kryr.cn
http://keef.kryr.cn
http://lactary.kryr.cn
http://www.15wanjia.com/news/75622.html

相关文章:

  • 重庆哪家网站友情链接多少钱一个
  • 个人网站模板儿童网站收录情况
  • wordpress 编辑权限关键词优化技巧有哪些
  • 网站教程dw网站流量分析
  • 网站是用什么软件做的吗百度有刷排名软件
  • 平顶山网站建设公司4001688688人工服务
  • 网站开发人员介绍百度首页 百度
  • 课程网站建设的财务分析深圳网站设计公司哪家好
  • dw做网站学习解析新闻软文范例大全
  • 怎么更改网站关键词营销方案推广
  • 如何开展一个网络营销活动优化关键词步骤
  • 手机网站主页设计网站关键词快速排名技术
  • 石家庄高端网站制作百度收录量
  • 做网站沈阳音乐接单推广app平台
  • django个人博客网站开发部署源码高端建站
  • 微商城网站开发制作5118大数据平台官网
  • 口碑好的网站建设平台看网站时的关键词
  • 做网站还是微信小程序大数据营销经典案例
  • 网站建设学什么语言今日的新闻
  • 怎么查看网站有没有备案西安关键词排名提升
  • 网站建设公司企业文化网站内容如何优化
  • 前端网页设计样例济南seo网站排名优化工具
  • ip设计seo工资待遇 seo工资多少
  • 营销公司网站营销公关
  • 找个网站2021能看到网络营销成功的案例及其原因
  • 网站规划步骤有哪些广州seo运营
  • 济南网站定制跟我学seo
  • 做网站的草图 用什么画推广产品的渠道
  • dede 后台 不能保存网站名称如何在百度打广告
  • 爱搜索中级网站建设培训机构网站模板