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

东莞网站制作咨询祥奔科技定制类做网站多少钱

东莞网站制作咨询祥奔科技,定制类做网站多少钱,企业网站制作流程图,网站建设5iec【C】动态内存管理 new和delete用法内置类型自定义类型抛异常定位new 刨析new和delete的执行与实现逻辑功能执行顺序newdelete 功能实现operator new与operator delete malloc free与new delete的总结 在我们学习C之前 在C语言中常用的动态内存管理的函数为#xff1a; mallo… 【C】动态内存管理 new和delete用法内置类型自定义类型抛异常定位new 刨析new和delete的执行与实现逻辑功能执行顺序newdelete 功能实现operator new与operator delete malloc free与new delete的总结 在我们学习C之前 在C语言中常用的动态内存管理的函数为 malloc calloc realloc free 在我们学习了C后也迎来了新的动态内存管理的操作符 new new和delete 用法 内置类型 //对应类型指针接收 申请的类型 int* p1 new int//将创建的int变量赋值为3 int* p2new int(3);//申请多个int对象并将其赋值为1和2 int* p3 new int[2] {1, 2};//将new申请的空间进行释放 delete p1; delete p2;//与new[]配合使用 delete[] p3;从这上面我们可以看到new其实也没有什么特别出彩的地方初始化和申请多个对象老哥俩也都能做到 但是我们要看的是C对于C的区别可不是内置类型而是自定义类型。 自定义类型 这里是malloc的自定义类型的开辟内存方法 class A { public:A(int x 3):_x(x){}~A() {} private:int _x;}; int main() {A* A1 (A*)malloc(sizeof(A));free(A1); }接下来是new的申请内存的使用。 class A { public:A(int x 3):_x(x){cout 构造;}~A() {cout \n 析构;} private:int _x;};int main() {A* A1 new A(3);delete A1; }这里看到结果相信大家就看到new的一部分优势了。 new会自动调用构造函数delete会自动调用析构函数而free和malloc做不到 这就使new可以对开辟的对象进行初始化而malloc做不到 抛异常 在使用malloc中时当遇到申请空间失败时会进行返回空地址的。 就是通过返回值来表示错误 int main() {while (malloc(sizeof(1024 * 1024))){} }这个代码就是不挺向堆区申请空间直到malloc返回指针为空时结束 而在C中更偏向抛异常的表示方法。 int main() {int* p1nullptr;do{p1new int[1024 * 1024];} while (p1); }这里不停申请会出现错误 new在使用的时候会对申请空间的错误进行抛出异常。 这个时候想要看到什么地方出错就需要对异常进行捕获。 int main() {int* p1nullptr;try {do{p1new int[1024 * 1024];} while (p1);}catch (const exception e){cout e.what() endl;} }这里就成功将错误展示了出来。 定位new 经过上面我们知道new具有初始化对象的功能这是malloc不曾具有的。 所以这个时候就引出了new的一个特殊用法。 不需要new来申请和销毁空间只是对对象进行初始化 用法 new (place_address) type class A { public:A(int member13){_member member;}~A(){cout \n 析构;} private:int _member;};int main() { //这里的A1只是一个地址没有进行初始化。A* A1 (A*)malloc(sizeof(A)); //这里通过new来调用构造函数 地址 类型 构造函数的参数new (A1) A (1);}这个一般来讲都是用在池化技术里的。 博主也没学到哪所以只能稍微简单讲下 为了提高效率所以会选择一次申请一块空间 刨析new和delete的执行与实现逻辑 这里我们从上面能看到new和delete具有以下功能 1.开辟/销毁 空间 2.抛出异常 3.调用 构造/析构 函数 功能执行顺序 这里就随便写个代码来解释它的执行 class A { public:A(){_member new int;}~A() {cout \n 析构;delete _member;} private:int* _member;};int main() {A* A1 new A; }new 通过这上面的顺序我们能知道new一个对象所走的步骤 我们初心是为了理清楚 1.开辟空间 2.抛出异常 3.调用 构造 函数 这三步的步骤顺序。 这里为了让大家看得清楚一点就稍微标记一下 这里我们就能看到对于new来说 需要进行的操作步骤是 1.用malloc来向堆区申请空间 2.对malloc进行判断是否出错。 3.调用构造函数 delete 而delete就很简单了 这是new所走的步骤。 这里我们能看到每个变量都层层指向 所以我们原路返回一个一个回头销毁就行 这里我们也进行标记一下 所以delete的执行顺序为 1.调用构造函数 2.用free来向堆区申请空间 3.对free进行判断是否出错。 功能实现 这里我们知道了new和delete的底层执行顺序 这里就要来了解一下他们的实现的方式了。 1.开辟/销毁 空间 2.抛出异常 3.调用 构造/析构 函数 我们的目标是要实现这三个功能。 销毁/开辟空间在C语言中不就有现成的吗 free和malloc函数。 所以实现第一步直接调用malloc和free即可 第二步抛出异常就是按照情况进行判断然后进行异常的捕获 第三步调用构造析构函数不难直接调用就可以 operator new与operator delete 这里的operator new和operator delete 是设计的全局函数专门为new和delete的实现的函数 主要的作用是实现前两步 1.开辟/销毁 空间 2.抛出异常 这里就能写出new和delete的实现逻辑了 malloc free与new delete的总结 综上所述 new和delete在实现的过程中调用了free和malloc的函数。 所以可以说 new和delete可以说是为了让内存开辟更适合面向对象语言的使用而诞生的 所以与其说new和malloc的区别不如说new对于malloc的提升有哪些 提升 1. malloc的返回值为(void), 在使用时必须强转。new不需要因为new后跟的是空间的类 2. malloc申请空间失败时返回的是NULL因此使用时必须判空new不需要但是new需要捕获异常 3. 申请自定义类型对象时malloc/free只会开辟空间不会调用构造函数与析构函数 而new在申请空间后会调用构造函数完成对象的初始化delete在释放空间前会调用析构函数完成空间中资源的清理 4.malloc不会对申请的空间进行初始化new可以对申请内存进行初始化。
http://www.w-s-a.com/news/937972/

相关文章:

  • 网站怎么做dns解析公司官网改版方案
  • 湛江市住房和城乡建设局网站杭州网站公司哪家服务好
  • 设计网站公司湖南岚鸿设计镜像的网站怎么做排名
  • 你注册过哪些网站微信app下载安装官方版2019
  • 杭州滨江的网站建设公司人才招聘网网站策划方案
  • 门户网站是指提供什么的网站网站优化需要工具
  • 和小男生做的网站代理公司注册步骤
  • 天猫网站建设的目标是什么seo有些什么关键词
  • 网站前端建设都需要什么莱芜信息港网页
  • 如何做360网站优化网站建设培训教程新手入门到精通
  • 做网站有的浏览器怎么做网站网站赚钱
  • 织梦 做网站 教程百度登录个人中心官网
  • ftp怎么修改网站wordpress分享积分
  • 营销策划方案的步骤西安关键词优化软件
  • 南宁自己的网站移动互联网技术学什么
  • 2017湖北建设教育协会网站自己接单做网站
  • 定制网站建设制作h5网站要多久
  • 泰安中呼网站建设有限公司 概况个人网站的设计与实现参考文献
  • 圣诞节网站怎么做怎么获取网站的图片
  • 想找个人做网站音乐网站建设教程视频教程
  • 网站收录一键提交阿里巴巴做网站多少钱
  • 怎么做网站投放广告商务网站建设实训报告
  • 服装代销的网站源码国内电子商务网站有哪些
  • qq空间怎么做网站做企业平台的网站有哪些
  • 网站的优缺点wordpress手机适配模板中文
  • 福州网站建设H5广告公司简介简短
  • 网站404页面的作用app开发郑州
  • 亚马逊中国网站建设目标网站建设的策划
  • 林州网站建设服务徐州网站建设
  • 如何检测网站死链景德镇网站建设哪家好