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

网站建设中 html5做文具的网站

网站建设中 html5,做文具的网站,seo网络排名优化方法,网站界面排版好看引言#xff1a; 北京时间#xff1a;2023/2/12/18:04#xff0c;昨天下午到达学校#xff0c;摆烂到现在#xff0c;该睡睡#xff0c;该吃吃#xff0c;该玩玩#xff0c;在一顿操作之下#xff0c;目前作息调整好了一些#xff0c;在此记录#xff0c;2月11…引言 北京时间2023/2/12/18:04昨天下午到达学校摆烂到现在该睡睡该吃吃该玩玩在一顿操作之下目前作息调整好了一些在此记录2月11开学之日是比较搞笑、难忘的一天。简洁记录之后此时我们就开始新知识的学习一起来看一看什么是C中的内存管理。 C中的内存管理 复习C语言中的内存管理 谈到内存管理我们必须要想到的就是内存的三个基本大区栈区、堆区、静态区但当我们一想到这些东西的时候我们还应该想到的就是C语言中的动态内存规划谈到动态内存规划此时我们就应该想到其中的4大天王4个有关动态内存规划的函数malloc、calloc、realloc所以接下来我们就来复习看一下这三个函数的使用和特性。 函数使用方法和特性mallocint*p1 int*malloc(10*sizeof(int));不会初始化空间callocint*p1 (int*)calloc(10,sizeof(int));会初始化空间reallocint*p2 (int*)realloc(p1,40);用于扩容场景free释放我动态开辟的空间 搞定了C语言中的知识之后此时我们就开始我们C中有关内存管理知识的学习啦首先在我们内存中我们的常量区也叫作数据区并且我们的栈区是从高地址向低地址存放数据的我们的堆区是从低地址向高地址存放数据的如图所示 所以此时我们就带着这幅图去学习一下什么C中的内存规划C中的内存规划主要就是涉及到两个关键字new和delete搞定了这两个关键字的特性和使用方法我们就把C中的内存规划给学的差不多了首先C中为什么要提出new和delete这两个关键字呢其实目的主要就是因为在C语言中并没有专门针对于自定义类型使用的内存开辟函数和释放函数有的只是针对于内置类型的函数malloc、realloc、malloc、free并没有专门给自定义类型使用的函数所以在我们的C中有了类和对象的概念之后自定义类型变得是更加的重要所以为了专门给自定义类型的内存申请和释放C中就提出了new和delete这两个函数并且我们的new和delete不仅针对自定义类型可以使用对我们内置类型也是同样适用的例如int* p1 new int;意思就是开辟一个整形类型给p1指针但注意此时的该内存是没有被初始化的只有这样写int* p1 new int(10);此时的该整形内存才会被初始化为10所以我们的new关键字开辟的空间不管是自定义类型还是内置类型此时你自己都是可以决定要不要进行初始化决定初始化的值到底是给多少所以这就是new的好处不仅可以对所有类型开辟空间还可以决定初始化注意此时上句代码一定要区别于下面这句代码int* p1 new int[10]上述代码的意思是开辟一个整形空间给p1并且将该空间初始化为10而该句代码的意思却是开辟10个整形空间给p1并且无初始化效果若你想要有初始化效果那么此时你就可以写成这样int* p1 new int[10] {1,2,3,4,5,6,7,8,9,10}; 具体使用如图所示 并且此时看见上述的代码是我们要意识到我们的new和delete要配套使用malloc和free要配套使用不可以交叉使用不然会出问题。 总new对于自定义类型的使用就是new类型圆括号初始化或者中括号个数对于自定义类型的使用就是new单个对象就是调用构造函数new多个对象就是调多次构造函数所以new/delete和malloc/free最大的区别就是它们对于自定义类型使用时new会自动调用构造函数delete会自动调用析构函数。 operator new 和operator delete的使用 new是用户也就是我们写代码的时候进行动态内存申请和释放的操作符operator new和operator delete是系统提供的全局函数并不是什么重载就是一个库里的函数而已也就是编译器使用的函数所以new申请空间使用的就是底层函数operator newdelete释放空间使用的就是底层函数operator delete并且此时operator new 实际上使用的却又是malloc来申请空间operator delete实际上使用的是free来释放空间所以operator new和operator delete本质上就是malloc和free的封装。搞懂了这些此时我们就再来看一下C中为什么要有new和delete。 再谈new出现的意义 1.要满足空间申请因为C语言中已经有该功能所以申请空间的功能就不需要重新实现了直接原样的使用malloc就行 2.满足自动调用构造函数去初始化自定义类型C语言中没有该功能所以该功能是需要自己去实现的所以此时就要在malloc的基础之上再加上这一功能这也就是new出现的原因 所以在上述的基础上我们就知道了new出现的原因就是帮助用户去使用C语言中的malloc功能并且实现自动调用构造函数的功能的一个封装函数。并且此时因为malloc失败之后返回的是空指针不符合我们面向对象的过程所以我们如果想要失败之后返回的是异常的话就需要重新去写一个函数出来该函数就是operator new这也就是operator new出现的原因。所以operator new就是为了封装malloc前提下也可以实现自动调用构造函数和开辟失败之后可以返回一个异常给我们而不是返回空指针的作用这些适合自定义类型使用的开空间特性。所以这就是operator new出现的原因当然此时的operator delete是同理如此使用的。只是此时delete在使用之前必须先调用析构函数而已只有把所有的空间资源调用析构函数释放完了之后delete才会去释放该对象原理和new调用operator new是一样的本质就是去调用free函数和malloc函数。 并且此时除了operator new和operator delete 还有一个operator new[]; 一个原理此时的调用原则就是operator nwe[ ]-operator new-malloc new和delete对于内置类型和自定义类型的区别 好的搞懂了这些此时我们就来看一下new和delete对于内置类型和自定义类型的区别主要就是为了研究一下怎么写代码才不会出问题到底需不需配套使用例如此时我有一个栈我用这个栈在main函数中创建了一个局部对象 st(Stack st),此时的这个对象是因为它是一个自定义类型所以此时它是不需要我自己去释放的因为自定义类型都会去自己调用构造函数和析构函数只有内置类型才是因为栈帧的销毁而销毁的但一定要去注意指针这个内置类型 因为指针变量都是一个内置类型的变量无论是什么类型的指针都是一样的例如Stack* ptr和int* p1此时的ptr和p1在本质上都是一个内置类型对象所以不需要我们自己去销毁它会自己随着栈帧的销毁而销毁明白了这个东西此时重点就来了。 重点虽然如上述所说指针都是内置类型会自己销毁但是指针指向的那块空间是不会自己销毁的所以此时如果你不仔细做处理的话此时你的程序就会因为没有释放内存而崩溃所以当我们创建了一个指针变量的时候就一定要考虑到指针指向的空间存放在什么位置例如此时的该栈栈中的数据中有一个数组此时的该数组是一个动态数组是通过new关键字开辟出来的所以此时可以明显的知道该空间是在堆区上的所以此时ptr指针指向的该空间是不会自己释放的所以需要我们进行手动释放例如delete ptr;所以此时一个自定义类型的指针ptr例如Stack* ptr new Stack;此时就不可以像Stack* st;一样想要使用free和delete都可以释放指针指向的空间。因为Stack st;并没有多余的空间需要清理此时它只要把在栈中的成员变量中的那个指针new开辟出来的那块动态数组的空间清理掉就可以了因为该空间是栈中的new开辟出的一个动态数组所以free可以直接把st对象中的那块Stack中的动态开辟的数组空间直接给释放掉。然而我们的Stack* ptr new Stack;此时指针ptr是在内存中的栈帧上的但ptr指向了一块new出来的Stack该Stack是在堆区的并且Stack中还有一个指针该指针指向的空间又是new出来的所以此时这块空间也是在堆区上的所以此时ptr指向的空间又指向了一块空间所以此时不可以直接free(ptr)会有内存泄露问题只有把Stack中new出来的空间给先释放才可以把ptr指向的空间释放所以此时就不可以使用free去直接释放而是要使用delete ptr;去释放因为delete会先去调用析构函数但是前提是该指针指向的空间的类型为自定义类型把ptr指针指向的空间中又开辟的空间给先析构掉然后再去operator delete调用free去释放ptr指针指向的空间但如果上述的情况你写成free ptr;也是可以的只是少调用了一次析构函数而已然后造成内存泄露的问题因为在C和C中并不会帮助我们检查内存泄露问题所以综上我们在释放内存的时候一定要匹配使用并且并不是自定义类型就一定有问题主要是还要看该自定义类型中是否存在指针指向的另一块空间。 浅浅的摸一下泛型编程 从模板看泛型编程 写了这么久的代码我们知道在C中有一个东西叫函数重载可以让我们把一个函数名(Swap)给重复使用通过参数类型的不同来区别函数的不同但是会发现有一种类型的参数我就需要写一个该类型的Swap函数这样是比较麻烦的所以C中就又提出了模板的概念该概念的意思就是可以让我们实现一个与类型无关的Swap函数别的函数就通过该模板进行使用就是相当于存在一个模具通过给这个模具填充不同的材料类型来获得不同的铸件既生成具体类型的代码这样就可以节省很多的代码量了所以总的来说泛型编程就是编写与类型无关的通用代码是代码复用的一种手段模板就是泛型编程的基础。 什么是模板 首先模板分成两类一个是函数模板一个是模板类 函数模板类模板 什么是函数模板 概念函数模板代表了一个函数家族该函数模板与类型无关在使用时被参数化根据实参类型产生函数的特定类型版本。 具体模板的实现如图 注意此时虽然在调试期间我们看到的是同一个函数但是只是编译器处理过之后的本质在系统内部是两个不同的函数从栈帧的大小和汇编代码这些方面都是可以看出来的。 并且此时我们知道在C类和对象中有一个对象实例化的过程所以此时模板的使用也是有一个模板实例化的过程的此时的该过程的理解就可以让我们更好的理解为什么模板使用的是两个不同的函数如图 模板实例化的一些小问题 主要是分为自动推演模板类型和显示实例化两种 什么是自动推演模板类型例 cout Add((double)b, d) endl;cout Add(a, (int)c) endl;此时就是我们自己去进行强制类型转换把不是同类型的两个数据给转换成同一类型这样才可以去实现模板不会出现无法识别模板的问题 显示实例化 cout Adddouble(a, c) endl; cout Addint(b, d) endl;这两句代码就是显示实例化直接把该数据的类型写在函数名的后面确定了该函数数据的类型此时这样模板就可以很好的识别参数了。 如图 templateclass T T Add(const T left, const T right) {return left right; }int main() {int a 1, b 2;double c 1.1, d 2.2;swap(a, b);swap(c, d);//实参传递给形参自动推演模板类型cout Add((double)b, d) endl;cout Add(a, (int)c) endl;//显示实例化cout Adddouble(a, c) endl;cout Addint(b, d) endl;return 0; }并且此时强调我们的库中已经用模板给我们实现了一个swap函数所以以后我们可以直接使用。 并且对于非模板函数和同名函数模板如果其它条件都相同在调用时会优先调用非模板函数而不会从该模板产生出一个实例如果模板可以产生一个具有更好匹配的函数那么选择模板如类型不相同的两个数据并且模板函数是不允许自动类型转换的只有普通函数才可以进行自动类型转换。 如图 什么是类模板 使用模板类直接就可以把我们以前使用的typedef的方法给淘汰掉了模板类直接就可以搞定每个数据结构的类型直接使用显示实例化的方式把该数据结构的类型给确定根本不需要去改什么typedef定义的类型一个尖括号 直接搞定了剩下的交给编译器去完成就行了。 如图 强调类模板只能使用显示实例化的方式去使用 总结C这块老腊肉我们又小小的啃了一口所以继续加油吧
http://www.dnsts.com.cn/news/9199.html

相关文章:

  • 济南手机网站网店设计公司
  • 来凡网站建设公司网站文章优化流程方案
  • 网站设计的国际专业流程长春火车站最新防疫要求
  • 孝感市建设网站做蛋糕哪个教程网站好
  • 新网站seo技术龙华附近网站建设公司
  • 界面设计优秀的网站有哪些网站课程建设申报书
  • 搭建网站多少时间电子商务网站建设实用教程教案
  • 网站开发公司云鲸互创怎么联系网页超链接怎么做
  • 郑州建网站需要多少钱去西安旅游最佳路线
  • 辛集建设网站永州做网站公司
  • 最好用的免费建站平台营销型网站建设页面
  • 做电影解析网站阿里云域名备案网站建设方案书
  • 创免费网站智慧团建网页版手机登录
  • 石家庄网站制作工具微信怎么链接wordpress
  • 企业建设网站是网络营销吗包图网图片素材
  • 哪里有培训网站开发项目建设调研报告
  • 个人网站发布怎么做企业网站颜色
  • 国内公司网站需要备案做网站买什么笔记本好
  • 网站后台更换首页图片平面设计自学网站有哪些
  • 网站建设与维护 前台银川做企业网站
  • 徐州建站平台专业制作网站多少钱
  • 做任务兼职赚钱的网站网站建设文献文档
  • html5怎么做网站初学php者网站首页怎么做
  • 做网站公司哪家比较好wordpress添加视频解析
  • wordpress 一个主题网站搭建 商城 seo
  • 海洋承德网站建设公司常熟市网页设计公司
  • 做进化树的网站简单的编程代码
  • 长春 建网站wordpress 云备份数据库
  • 月子会所网站源码企业网站设计多少钱
  • 网站透明flash园林景观设计公司官网