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

专业的建站公司推广网站新闻模块代码

专业的建站公司推广,网站新闻模块代码,深圳工业设计展2021,公司网站建设任务书作者主页#xff1a; 作者主页 本篇博客专栏#xff1a;C 创作时间 #xff1a;2024年8月20日 一#xff0c;什么是智能指针 在C中没有垃圾回收机制#xff0c;必须自己释放分配的内存#xff0c;否则就会造成内存泄露。解决这个问题最有效的方法是使用智能指针…  作者主页     作者主页 本篇博客专栏C 创作时间 2024年8月20日 一什么是智能指针 在C中没有垃圾回收机制必须自己释放分配的内存否则就会造成内存泄露。解决这个问题最有效的方法是使用智能指针smart pointer。智能指针是存储指向动态分配堆对象指针的类用于生存期的控制能够确保在离开指针所在作用域时自动地销毁动态分配的对象防止内存泄露。智能指针的核心实现技术是引用计数每使用它一次内部引用计数加1每析构一次内部的引用计数减1减为0时删除所指向的堆内存。 c中用的最多的是下面三种智能指针 C11中提供了三种智能指针使用这些智能指针时需要引用头文件memory std::shared_ptr共享的智能指针std::unique_ptr独占的智能指针std::weak_ptr弱引用的智能指针它不共享指针不能操作资源是用来监视shared_ptr的。 二共享的智能指针shared_ptr 首先了解一下基本概念再看代码会学的很快 1. shared_ptr的初始化 共享智能指针是指多个智能指针可以同时管理同一块有效的内存共享智能指针shared_ptr 是一个模板类如果要进行初始化有三种方式通过构造函数、std::make_shared辅助函数以及reset方法。共享智能指针对象初始化完毕之后就指向了要管理的那块堆内存如果想要查看当前有多少个智能指针同时管理着这块内存可以使用共享智能指针提供的一个成员函数use_count 2.获取原始指针 对应基础数据类型来说通过操作智能指针和操作智能指针管理的内存效果是一样的可以直接完成数据的读写。但是如果共享智能指针管理的是一个对象那么就需要取出原始内存的地址再操作可以调用共享智能指针类提供的get()方法得到原始地址 3. 指定删除器 当智能指针管理的内存对应的引用计数变为0的时候这块内存就会被智能指针析构掉了。另外我们在初始化智能指针的时候也可以自己指定删除动作这个删除操作对应的函数被称之为删除器这个删除器函数本质是一个回调函数我们只需要进行实现其调用是由智能指针完成的。 下面我们来看一下代码如何实现  #pragma once #include iostream #include functionalnamespace zy {templateclass Tclass shared_ptr{public:shared_ptr(T* ptr nullptr) : _ptr(ptr), _pcount(ptr ? new int(1) : nullptr){std::cout shared_ptr(T* ptr) std::endl;}templateclass Dshared_ptr(T* ptr nullptr,D del): _ptr(ptr), _pcount(ptr ? new int(1) : nullptr), _del(del){}shared_ptr(const shared_ptr sp) : _ptr(sp._ptr), _pcount(sp._pcount){(*_pcount);std::cout Copy constructor std::endl;}shared_ptr operator(const shared_ptr sp){if (this ! sp){// 释放当前对象管理的资源如果有this-Realease();_ptr sp._ptr;_pcount sp._pcount;(*_pcount);}return *this;}~shared_ptr(){Realease();}void Realease(){if (_pcount --(*_pcount) 0){//delete _ptr;_del(_ptr);delete _pcount;_ptr nullptr;_pcount nullptr;}}T* get(){return _ptr;}int use_count(){return _pcount ? *_pcount : 0;}T operator*() { return *_ptr; }T* operator-() { return _ptr; }private:T* _ptr;int* _pcount;fuctionvoid(T* ptr)_del [](T* ptr) {delete ptr};}; } 三独占的智能指针unique_ptr 1. 初始化 std::unique_ptr是一个独占型的智能指针它不允许其他的智能指针共享其内部的指针可以通过它的构造函数初始化一个独占智能指针对象但是不允许通过赋值将一个unique_ptr赋值给另一个unique_ptr。 2. 删除器 unique_ptr指定删除器和shared_ptr指定删除器是有区别的unique_ptr指定删除器的时候需要确定删除器的类型所以不能像shared_ptr那样直接指定删除器 #pragma once #include iostreamtemplate typename T class unique_ptr { public:// 构造函数接受一个原始指针并接管其所有权unique_ptr(T* ptr nullptr) : ptr_(ptr) {}// 移动构造函数转移所有权unique_ptr(unique_ptr other) noexcept : ptr_(other.ptr_) {other.ptr_ nullptr;}// 移动赋值运算符转移所有权unique_ptr operator(unique_ptr other) noexcept {if (this! other) {reset();ptr_ other.ptr_;other.ptr_ nullptr;}return *this;}// 析构函数释放所管理的资源~unique_ptr() {reset();}// 解引用操作符T operator*() const {return *ptr_;}// 箭头操作符T* operator-() const {return ptr_;}// 获取原始指针T* get() const {return ptr_;}// 释放所管理的资源并将指针置为 nullptrvoid reset(T* ptr nullptr) {if (ptr_) {delete ptr_;}ptr_ ptr;}private:T* ptr_; }; 四 弱引用的智能指针weak_ptr 弱引用智能指针std::weak_ptr可以看做是shared_ptr的助手它不管理shared_ptr内部的指针。std::weak_ptr没有重载操作符*和-因为它不共享指针不能操作资源所以它的构造不会增加引用计数析构也不会减少引用计数它的主要作用就是作为一个旁观者监视shared_ptr中管理的资源是否存在。 1 初始化 弱引用智能指针std::weak_ptr可以看做是shared_ptr的助手它不管理shared_ptr内部的指针。std::weak_ptr没有重载操作符*和-因为它不共享指针不能操作资源所以它的构造不会增加引用计数析构也不会减少引用计数它的主要作用就是作为一个旁观者监视shared_ptr中管理的资源是否存在。 #include iostream #include memory 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;return 0; } weak_ptrint wp1;构造了一个空weak_ptr对象weak_ptrint wp2(wp1);通过一个空weak_ptr对象构造了另一个空weak_ptr对象weak_ptrint wp3(sp);通过一个shared_ptr对象构造了一个可用的weak_ptr实例对象wp4 sp;通过一个shared_ptr对象构造了一个可用的weak_ptr实例对象这是一个隐式类型转换wp5 wp3;通过一个weak_ptr对象构造了一个可用的weak_ptr实例对象 通过调用std::weak_ptr类提供的use_count()方法可以获得当前所观测资源的引用计数 2.常用函数 通过调用std::weak_ptr类提供的expired()方法来判断观测的资源是否已经被释放 通过调用std::weak_ptr类提供的lock()方法来获取管理所监测资源的shared_ptr对象 通过调用std::weak_ptr类提供的reset()方法来清空对象使其不监测任何资源 利用weak_ptr可以解决shared_ptr的一些问题 返回管理this的shared_ptr解决循环引用问题 最后 十分感谢你可以耐着性子把它读完和我可以坚持写到这里送几句话对你也对我 1.一个冷知识 屏蔽力是一个人最顶级的能力任何消耗你的人和事多看一眼都是你的不对。 2.你不用变得很外向内向挺好的但需要你发言的时候一定要勇敢。 正所谓君子可内敛不可懦弱面不公可起而论之。 3.成年人的世界只筛选不教育。 4.自律不是6点起床7点准时学习而是不管别人怎么说怎么看你也会坚持去做绝不打乱自己的节奏是一种自我的恒心。 5.你开始炫耀自己往往都是灾难的开始就像老子在《道德经》里写到光而不耀静水流深。 最后如果觉得我写的还不错请不要忘记点赞✌收藏✌加关注✌哦(ω) 愿我们一起加油奔向更美好的未来愿我们从懵懵懂懂的一枚菜鸟逐渐成为大佬。加油为自己点赞
http://www.w-s-a.com/news/472875/

相关文章:

  • 镇江网站建设优化案例分析dw2018网页制作步骤图文
  • 网站开发一个多少钱为什么前端都不用dw
  • 网站降权的原因北京中小企业网站建设公司
  • 个人域名能做网站吗wordpress
  • 手机网站设计只找亿企邦工业设计公司简介
  • 腾讯云主机做网站免费网站怎么做啊
  • 网站建设推广销售话术广州网页定制多少钱
  • 备案号是哪个网站项目管理pmp
  • 做网站需要哪些硬件软件网站视频链接怎么做的
  • 电子商务网站建设试题二wordpress主页显示浏览数
  • 网站快照没了广州企业电话大全
  • 网站项目开发收费标准网站开发app开发主营业务
  • 怎么到国外网站去接模具订单做互联网建设企业网站
  • 深圳品牌网站建设公司排名洪雅网站建设
  • nodejs 做网站wordpress主题绕过激活码
  • 平湖模板网站建设公司网页美工培训
  • 顺德网站建设市场建设工程交易中心网站
  • 深圳企业网站怎么做浪琴手表网站建设图
  • 2018网站外链怎么做济南 网站设计公司
  • 承德百度网站建设郑州网站seo优化公司
  • 四川建站模板网站公司分类信息网站制作
  • 网站开发前后端有wordpress模板安装教程视频教程
  • 有网站想修改里面的内容怎么做怎么做黑彩黑彩网站
  • 什么专业会做网站网站建设续费合同
  • 网站开发的项目开发网站做直播功能需要注册吗
  • 网站开发新手什么软件好网站设计师和ui设计师
  • 太仓苏州网站建设软件开发网站建设
  • 一个虚拟主机做2个网站吗工信部怎么查网站备案
  • 本地网站做淘宝客制作app步骤
  • 关于企业网站建设网页布局怎么设计