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

徐州做网站的公司招聘免费企业邮箱注册怎么注册

徐州做网站的公司招聘,免费企业邮箱注册怎么注册,重庆建设工程造价管理协会,网页编辑排版工具有哪些文章目录 一、C的内存管理方式二、new和delete的用法1.操作内置类型2.操作自定义内置类型 三、new和delete的底层实现1.operator new和operator delete函数2.new和delete的实现原理 四、定位new表达式五、malloc/free和new/delete的区别 一、C的内存管理方式 之前在C语言的动态… 文章目录 一、C的内存管理方式二、new和delete的用法1.操作内置类型2.操作自定义内置类型 三、new和delete的底层实现1.operator new和operator delete函数2.new和delete的实现原理 四、定位new表达式五、malloc/free和new/delete的区别 一、C的内存管理方式 之前在C语言的动态内存管理我们学过用来动态开辟空间的malloc/calloc/realloc和释放空间的free。C语言内存管理方式在C中可以继续使用但有些地方就无能为力而且使用起来比较麻烦因此C将malloc和free封装起来并起了新的名字new和delete。 二、new和delete的用法 1.操作内置类型 new和delete是操作符不是函数不需要单独添加头文件。 动态申请一个int类型的空间 int* p1 (int*)malloc(sizeof(int)); int* p2 new int; //释放内存 free(p1); delete p2;动态申请一个int类型的空间并初始化 int* p3 (int*)malloc(sizeof(int)); *p3 1; int* p4 new int(1); //释放内存 free(p3); delete p4;动态申请10个int类型的空间 int* p5 (int*)malloc(sizeof(int) * 10); int* p6 new int[10]; //释放内存 free(p5); delete[] p6;动态申请10个int类型的空间并初始化C11 int* p7 (int*)malloc(sizeof(int) * 10); int* p8 new int[10]{ 1,2,3 };//后面未初始化的部分默认为0 //释放内存 free(p7); delete[] p8;注意申请和释放单个元素的空间使用new/delete操作符申请和释放连续的空间使用new[ ]和delete[ ]一定要配套使用 通过对比明显new和delete的使用更方便简洁可以发现malloc与new的几个区别 1.malloc和free是函数而new和delete是操作符 2.并且malloc申请空间时不会初始化而new可以初始化只需要在()单个空间或者{}多个连续空间C11才引入里赋值即可 3.malloc申请空间时需要手动计算空间大小并传递new只需在其后跟上空间的类型即可如果是多个对象[ ]中指定对象个数。 4.malloc的返回值为void*,在使用时必须强转new不需要因为new后跟的是空间的类型 但是这些优点并不足以解释C不继续使用C语言的malloc和free去创建一个新用法。new和delete最大的价值体现自定义类型的操作上。 2.操作自定义内置类型 对于内置类型malloc/free与new/delete区别不大真正的区别在于自定义类型。 malloc/free与new/delete最大的区别是申请自定义类型对象时malloc是纯粹的开辟空间不会初始化而new在申请空间后会调用构造函数完成对象的初始化delete在释放空间前会调用析构函数完成空间中资源的清理。 对于需要资源申请的自定义类型更能体现其优势以链表为例 new会先开辟空间再调用构造函数初始化delete会先调用析构函数清理资源再释放空间这点是与malloc/free的最大区别也是C新增用法的主要原因。 三、new和delete的底层实现 1.operator new和operator delete函数 new和delete是用户进行动态内存申请和释放的操作符operator new 和operator delete是系统提供的全局函数也是对malloc和free进行过封装的函数。 operator new和malloc的最大区别就是当申请错误时处理的方式不一样。 malloc申请空间失败时会返回NULL operator new函数实际通过malloc来申请空间申请空间成功时直接返回失败则抛异常 new和delete是对operator new和operator delete这两个全局函数进行的封装。所以new/delete与malloc/free的不同malloc申请空间失败时返回的是NULL因此使用时必须判空new不需要判空申请失败会抛异常。 2.new和delete的实现原理 new在底层调用operator new全局函数来申请空间delete在底层调用operator delete全局函数来释放空间。 通过反汇编可以看到new先调用operator new本质上是通过malloc来申请空间然后再调用构造函数进行初始化delete先调用析构函数完成资源的清理再调用operator delete释放空间。 对于内置类型 new和mallocdelete和free基本类似不同的是new/delete申请和释放的是单个元素的空间new[]和delete[]申请的是连续空间而且new在申请空间失败时会抛异常malloc会返回NULL。 对于自定义类型 new原理先调用operator new来申请空间然后再调用构造函数进行初始化 delete原理先调用析构函数完成资源的清理再调用operator delete释放空间。 四、定位new表达式 定位new表达式是在已分配的原始内存空间中调用构造函数初始化一个对象。 格式new(指针名)类型 或者 new(指针名)类型(参数值) 对于自定义类型的对象需要使用new的定义表达式进行显示调用构造函数和析构函数进行初始化和资源清理。 class A { public:A(int a 0): _a(a){cout A(): this endl;}~A(){cout ~A(): this endl;} private:int _a; }; int main() {// p1现在指向的只不过是与A对象相同大小的一段空间还不能算是一个对象因为构造函数没有执行A* pa (A*)malloc(sizeof(A));new(pa)A;//显示调用构造函数//new(pa)A(10);pa-~A();//显示调用析构函数free(pa);return 0; }为什么要显示调用构造和析构 因为pa是是指针类型属于内置类型不会自动调用构造和析构所以需要显示调用。 定位new表达式在实际中一般是配合内存池使用。 内存池的工作原理是先向系统一次性申请比较大的空间没有初始化当我们每次去申请空间时就直接使用内存池里的空间然后再进行初始化。 五、malloc/free和new/delete的区别 1.malloc和free是函数new和delete是操作符 2.malloc申请的空间不会初始化new可以初始化 3.malloc申请空间时需要手动计算空间大小并传递new只需在其后跟上空间的类型即可 如果是多个对象[ ]中指定对象个数即可 4.malloc的返回值为void*, 在使用时必须强转new不需要因为new后跟的是空间的类型 5.malloc申请空间失败时返回NULL因此使用时必须判空new不需要判空申请失败会抛异常 6.申请自定义类型对象时malloc/free只会开辟空间不会调用构造函数与析构函数而new在申请空间后会调用构造函数完成对象的初始化delete在释放空间前会调用析构函数完成空间中资源的清理。
http://www.hkea.cn/news/14449533/

相关文章:

  • 网站访问量 wordpressWordPress vidropro
  • 创意网站页面模板网站建设开发
  • 用商城系统做教育网站泰安中呼网站建设有限公司 概况
  • 百度网站排名全掉怎么使用微wordpress
  • 网站建设信息介绍庆阳市住房和城乡建设局网站
  • pycharm 做网站哪个好受欢迎的合肥网站建设
  • 网站建设的资源整合与系统设计徐州微网站开发
  • 做网站的没有进项票怎么办wordpress结婚模板
  • 苏州公司做变更网站如何开发游戏软件
  • 杭州网站建设制作公司wordpress主题 机械
  • 做汽车养护的网站途牛旅行网站建设策划书
  • 网络服务都有哪些上海优化外包公司
  • 新建网站的评估工业和信息化部产业发展促进中心
  • 东莞app制作公司seo营销排名
  • 对于高校类建设网站的要求做淘宝券网站
  • 大学什么专业做网站旅游网站国内外研究现状
  • 如何把代码放在网站首页教程牡丹江制作网站
  • 官方网站建设专家磐石网络广东seo站外推广折扣
  • 做网站销售有前景网络设计山西分公司
  • 建设工程检测预约网站网站建站公司订单多吗
  • 中关村网站建设的公司桂林亿星网络科技公司
  • 青岛正规网站建设哪家好怎么做租号网站
  • 吴中区建设局网站电子商务网站规划与建设试题
  • 高端网站改版请问门户网站是什么意思
  • 建设网站有什么原则网站模板如何制作
  • 鲜花网站设计网站地图制作工具
  • 成都市网站设做网站一些专业术语
  • 网站建设和服务器运营湘潭网站建设开发
  • app要有网站做基础一般网站建设流程
  • 温州网站制作多少钱wordpress禁止用户注册