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

黄页推广引流网站杭州网站制作公司

黄页推广引流网站,杭州网站制作公司,wordpress自动评论工具,网站推广优化公司目录往期文章智能指针本身的方法对于unique_ptr对于shared_ptr对于weak_ptr使用建议1、使用工厂函数而非new构造对象2、在类内部调用其他类的方法3、在某类内部将当前对象指针共享给其他对象4、 智能指针只能管理堆对象#xff0c;不能管理栈上对象5、不能将this指针直接托管给… 目录往期文章智能指针本身的方法对于unique_ptr对于shared_ptr对于weak_ptr使用建议1、使用工厂函数而非new构造对象2、在类内部调用其他类的方法3、在某类内部将当前对象指针共享给其他对象4、 智能指针只能管理堆对象不能管理栈上对象5、不能将this指针直接托管给智能指针往期文章 C智能指针使用指南 part1:基本使用 智能指针本身的方法 智能指针有一个通用的规则就是-表示用于调用指针原有的方法而.则表示调用智能指针本身的方法。 对于unique_ptr #include iostream #include vector #include memory #include assert.h using namespace std; class A { public:void do_something(); }; // 智能指针有一个通用的规则就是-表示用于调用指针原有的方法而.则表示调用智能指针本身的方法. // 对于unique_ptr有下面几种本身方法 // get 获取智能指针保存的原生指针 // bool 判断该智能指针是否拥有指针 // release 释放所管理指针的所有权返回原生指针但是不销毁原生指针 // reset 释放并销毁原生指针。如果参数为一个新指针将管理这个新指针 int main() {std::unique_ptrA a(new A());A* origin_a a.get();if (a) {printf(a仍然拥有指针);}std::unique_ptrA a2(a.release()); // 转移拥有权a2.reset(new A()); // 释放并销毁原有对象持有一个新对象a2.reset(); // 释放并销毁原有对象等同于 a2 nullptrassert(a2 nullptr);return 0; } 对于shared_ptr // 对于shared_ptr有下面几种本身方法 // get 获取智能指针保存的原生指针 // bool 判断该智能指针是否拥有指针 // reset 释放并销毁原生指针。如果参数为一个新指针将管理这个新指针 // unique 如果引用计数为1返回true否则返回false // use_count 返回引用计数大小对于weak_ptr weak_ptr可以通过一个shared_ptr创建 // 智能指针有一个通用的规则就是-表示用于调用指针原有的方法而.则表示调用智能指针本身的方法. // expired 判断所指向的原生指针是否被释放如果释放了返回true否则返回false // use_count 返回原生指针的引用计数 // lock 返回shared_ptr;如果原生指针没有被释放则返回一个非空的shared_ptr,否则返回一个空的shared_ptr // reset 将本身置空 int main() {std::shared_ptrA a(new A());std::weak_ptrA weak_a a; // 不增加引用计数}使用建议 1、使用工厂函数而非new构造对象 在上面的代码中需要注意我们使用std::make_shared代替new的方式创建shared_ptr。 因为使用new的方式创建shared_ptr会导致出现两次内存申请而std::make_shared在内部实现时只会申请一个内存。 2、在类内部调用其他类的方法 不可以在A内部定义B、C的shared_ptr而是应该使用weak_ptr class A { private:std::weak_ptrB b_;std::weak_ptrC c_; public:void do_something();void set_b_c(const std::shared_ptrB b, const std::shared_ptrC c) {b_ b;c_ c;} };3、在某类内部将当前对象指针共享给其他对象 #include iostream #include vector #include memory using namespace std; class A;class D { private:std::shared_ptrA a_; public:D(std::shared_ptrA a): a_(a) {} };class A : public std::enable_shared_from_thisA{ public:void new_D(){// 错误方式用this指针重新构造shared_ptr将导致二次释放当前对象,重新创建的shared_ptr与当前对象的shared_ptr没有关系没有增加当前对象的引用计数// 关于这个问题可以详细地看一下这篇博客https://www.cnblogs.com/jo3yzhu/p/11358400.html // std::shared_ptrA this_shared_ptr1(this); // std::unique_ptrD d1(new D(this_shared_ptr1));// 正确方式 对象继承了enable_shared_from_this后可以通过shared_from_this()获取当前对象的shared_ptr指针。std::shared_ptrA this_shared_ptr2 shared_from_this();std::unique_ptrD d2(new D(this_shared_ptr2));} };int main() {std::shared_ptrA a(new A());a-new_D(); } 4、 智能指针只能管理堆对象不能管理栈上对象 栈上对象本身在出栈的时候就会被自动销毁如果将其指针交给智能指针会造成对象的二次销毁。 void function() {int tmp 0;std::unique_ptrint a(tmp); }5、不能将this指针直接托管给智能指针 如果对一个类初始化为智能指针那么在类内部函数用this指针重新构造shared_ptr不会增加引用计数会导致当前对象的二次释放。 class A { public:void function() {// 错误方式std::shared_ptrA this_shared_ptr(this);} }; std::shared_ptrA e std::make_sharedE();
http://www.pierceye.com/news/858001/

相关文章:

  • python做爬虫和做网站做两个一摸一样的网站
  • 网站做微信登录asp.net做网站头部和尾部_都用什么来实现
  • 南充哪里做网站太原关键词优化公司
  • 哪个网站做的ppt模板好投放广告网站
  • 公司网站中新闻中心怎样做优化百度浏览器电脑版
  • 厦门网站建设 九来外国做视频在线观看网站
  • 用.net做购物网站山东建筑公司实力排名
  • 做百度推广网站找谁好宁夏省建筑信息平台
  • phpcmsv9手机网站源码网站开发ide php
  • 学校网站建设成功案例微信公众号网站导航怎么做
  • 重庆汽车网站建设建立大安全大应急框架
  • 重庆模板建站定制网站做企业网站到哪里找
  • asp技术做网站网站建设推广是什么工作室
  • 运营公众号还是做网站室内装修设计软件哪个好用
  • 卖营销软件的网站如何利用站群做网站
  • 网站空间价格怎么算网站制作与发布
  • 做网站的动态图片廊坊做网站哪家好
  • 建设企业网站报价怎么做网站logo
  • 企业类网站谷歌seo招聘
  • asp.net网站安装顺序idc 公司网站模板
  • 新手学做网站优化2022app分类排行
  • 微信微网站制作公司2008年做的网站
  • 网站建设柒首先金手指1男孩做网站
  • 葫芦岛市建设局网站网页制作与网站发布
  • 企业网站首页布局尺寸营销网站建设哪家便宜
  • 专题网站建设策划郑州市做网站的公
  • wordpress網頁版天津百度网站排名优化
  • 做网站建设销售工资代做电大网站ui作业
  • DMZ做网站wordpress 小工具 创建
  • 宠物网站建设方案外贸网站建设公司服务