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

海口手机建站模板移动端网站咋做

海口手机建站模板,移动端网站咋做,济南市网站建设企业,二次开发是指12.1.3 shared_ptr 和 new 结合使用 如上文所述#xff0c;如果我们不初始化一个智能指针#xff0c;那么它将会被初始化为一个空指针#xff08;需要注意的是#xff0c;智能指针与普通指针在此处有着非常明显的区别。如果只声明某个类型的普通指针#xff0c;而不对它进…12.1.3 shared_ptr 和 new 结合使用 如上文所述如果我们不初始化一个智能指针那么它将会被初始化为一个空指针需要注意的是智能指针与普通指针在此处有着非常明显的区别。如果只声明某个类型的普通指针而不对它进行初始化那么这将会是危险的因为不经初始化的普通指针是空悬指针它所指向的地址是未知的。而不经初始化的智能指针是一个空指针它是安全的。还可以用 new 返回的指针来初始化智能指针 shared_ptrdouble p1; // shared_ptr 可以指向一个 double shared_ptrint p2(new int(42)); // p2 指向一个值为 42 的 int接受指针参数的智能指针构造函数是 explicit 的。因此不能将一个内置隐式指针转换为一个智能指针必须使用直接初始化形式来初始化一个普通指针 shared_ptrint p1 new int(1024); // 错误❌: 必须使用直接初始化形式 shared_ptrint p2(new int(1024)); // 正确: 使用了直接初始化形式p1 的初始化隐式地要求编译器用一个 new 返回的 int* 来创建一个 shared_ptr。由于我们不能进行内置指针到智能指针的隐式转换因此这条初始化语句是错误的。出于相同的原因一个返回 shared_ptr 的函数不能在其返回语句中隐式转换一个普通指针 shared_ptrint clone(int p) {return new int(p); // 错误❌: 隐式转换为 shared_ptrint }这一部分很好理解C 智能指针的规则就是不能将普通指针隐式地转换为智能指针由于 new 的返回值是某个类型的普通指针普通指针不能隐式转为智能指针因此使用 new … 对智能指针进行赋值是非法的 我们必须将 shared_ptr 显式绑定到一个想要返回的指针上 shared_ptrint clone(int p) {return shared_ptrint(new int(p)); // 正确: 显式地使用 int* 来创建 shared_ptrint }默认情况下一个用来初始化智能指针的普通指针必须指向动态内存因为智能指针默认使用 delete 释放它所关联的对象。 可以将智能指针绑定到一个指向其它类型的资源的指针上但是为了这样做我们必须提供自己的操作来替代 delete。 不要混合使用普通指针和智能指针 … … shared_ptr 可以协调对象的析构但这仅限于其自身的拷贝也是 shared_ptr之间。这也是 C Primer 推荐使用 make_shared 而不是 new 的原因。 这样我们就可以在分配对象的同时将 shared_ptr 与之绑定从而避免了无意中将同一块内存绑定到多个独立创建的 shared_ptr 上。 考虑下面对 shared_ptr 进行操作的函数 // 在函数调用时 shared_ptr 被创建并初始化 void process(shared_ptrint ptr) {// 使用 ptr } // ptr 离开作用域, 被销毁process 的参数是传值方式调用的因此实参会被拷贝到 ptr 中。拷贝一个 shared_ptr 会递增其引用计数因此在 process 运行过程中引用计数值至少为 2。当 process 结束时ptr 的引用计数递减但不会变为 0。因此当局部变量 ptr 被销毁时ptr 指向的内存不会被释放。 使用此函数的正确方法是传递给它一个 shared_ptr shared_ptrint p(new int(42)); // 引用计数为 1 process(p); // 拷贝 p 会递增它的引用计数; 在 process 中引用计数值为 2 int i *p; // 正确: 引用计数值为 1虽然不能传递给 process 一个内置指针但可以传递给它一个临时的shared_ptr这个 shared_ptr 是用一个内置指针显式构造的。但这样做可能会导致错误 int *x(new int(1024)); // 危险: x 是一个普通指针, 不是一个智能指针; process(x); // 错误❌: 不能将 int* 转换为一个 shared_ptrint; process(shared_ptrint(x)); // 合法的, 但内存会被释放; int j *x; // 未定义的, x 是一个空悬指针;在上面的调用中第一行建立一个指向动态内存的 x 指针它是一个 int 类型的指针指向的值为 1024并且它是一个普通指针。第二行是非法的因为 shared_ptr 和 普通指针之间没有隐式转换。第三行是正确的因为第三行的实参中显式地将普通指针转为智能指针但是智能指针所指向的地址会在函数调用结束时被释放。因此第四行是危险的因为 x 所指向的内存已经被释放被释放的过程在 C Primer 当中的解释不是很详尽我的理解是这样的当第三行对 process 进行调用时x 被显式地转换为智能指针指向 x 所指地址的引用计数被置为 1。当函数调用结束时x 所指地址的引用计数被置为 0该部分的内存随之被释放。此时由于函数调用外的 x 是一个普通指针它所指向的地址仍然是最初的地址而最初地址的内存在 process 函数调用后被释放所以此时 x 指向的地址被释放x 变为一个危险的空悬指针。 当将一个 shared_ptr 绑定到一个普通指针时我们就将内存的管理责任交给了这个 shared_ptr。一旦这样做了我们就不能再使用内置指针来访问 shared_ptr 所指向的内存了。 使用一个内置指针来访问一个智能指针所负责的对象是很危险的因为我们无法知道对象何时被销毁。 … … 也不要使用 get 初始化另一个智能指针或为智能指针赋值 智能指针类型定义了一个名为 get 的函数它返回一个内置指针指向智能指针关联的对象。此函数是为了这样一种情况而设计的我们需要向一个不能使用智能指针的代码传递一个内置指针。使用 get 返回的指针的代码不能 delete 此指针。 虽然编译器不会给出错误信息但将另一个智能指针也绑定到 get 返回的指针上是错误的 shared_ptrint p(new int(42)); // 引用计数为 1 int *q p.get(); // 正确: 但使用 q 时要注意, 不要让它管理的指针被释放 { // 新程序块shared_ptrint(q); // 未定义: 两个独立的 shared_ptr 指向相同的内存 } // 程序块结束, q 被销毁, 它指向的内存被释放 int foo *p; // 未定义: p 指向的内存已经被释放;在本例中p 和 q 指向相同的内存。由于它们是相互独立创建的因此各自的引用计数都是 1。当 q 所在的程序块结束时q 被销毁这会导致 q 指向的内存被释放。从而 p 变成一个空悬指针。 get 用来将指针的访问权限传递给代码你只有在确定代码不会 delete 指针的情况下才能使用 get。 其它 shared_ptr 操作 shared_ptr 还定义了一些其它操作。可以用 reset 来将一个新的指针赋予一个 shared_ptr p new int(1024); // 错误❌: 不能将一个指针赋予 shared_ptr p.reset(new int(1024)); // 正确: p 指向一个新对象与赋值类似reset 会更新引用计数如果需要的话会释放 p 指向的对象。reset 成员常与 unique 一起使用来控制多个 shared_ptr 共享的对象。
http://www.w-s-a.com/news/528986/

相关文章:

  • 电影天堂网站用什么程序做的wordpress 添加链接地址
  • 购买空间网站哪个好重庆英文网站建设
  • 建设网站需要注意什么问题设计网页通常使用什么语言
  • 彩票网站建设要多少钱西安英文网站建设
  • 静态班级网站印象云笔记 wordpress
  • 网站表单及商品列表详情模板永川网站制作联系电话
  • 网站建设与维护难不难网络服务机构的网站
  • 用三权重的网站做友链有好处没企业年金怎么查询
  • 工行网站跟建设网站区别wordpress加入地图
  • 网站的风格对比信息表广告门
  • 教育网站建设毕业设计说明书门户网站模式
  • 洛阳霞光建设网站html做分模块的网站
  • 域名建议网站wordpress 伪静态html
  • 网站风格化设计方案免费模式营销案例
  • 凤翔网站建设农村建设自己的网站首页
  • 怎样用网站做单笔外贸建筑设计公司合作加盟
  • 建网站买的是什么网站开发三层结构
  • wordpress图纸管理网站2345网址导航智能主版
  • 想调用等三方网站数据该怎么做培训课程
  • 高端营销网站建设wordpress咨询
  • 网站搜索框如何做创业怎么做网站
  • 网站手机版管理链接产品推广找哪家公司
  • vuejs 可做网站吗蜘蛛互联网站建设
  • 沈阳网站备案查询17zwd一起做业网站
  • 石家庄大型公司建站广州设计网站培训学校
  • 如何让百度收录中文域名网站wordpress前台管理评论
  • 铁岭 建筑公司网站 中企动力建设佛山app开发公司
  • 网站开发用的电脑深圳专业网站建设服务
  • 内容营销价值wordpress博客优化插件
  • 最优惠的郑州网站建设淘宝网商城