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

泗洪企业网站建设b2b网站免费推广

泗洪企业网站建设,b2b网站免费推广,电脑哪个网站可以做公务员试题,网站建设需用要什么文章目录1、动态内存管理2、内存管理方式operator new operator delete3、new和delete的实现原理1、动态内存管理 C兼容C语言关于内存分配的语法,而添加了C独有的东西。 //int* p1 (int*)malloc(sizeof(int));int* p1 new int;new是一个操作符,C不再需…

文章目录

  • 1、动态内存管理
  • 2、内存管理方式
    • operator new operator delete
  • 3、new和delete的实现原理


1、动态内存管理

C++兼容C语言关于内存分配的语法,而添加了C++独有的东西。

	//int* p1 = (int*)malloc(sizeof(int));int* p1 = new int;

new是一个操作符,C++不再需要强转类型。如果要开辟多个

	//int* p2 = (int*)malloc(sizeof(int) * 7);int* p2 = new int[7];

这个new不只是C++的动态开辟方式,还有独特的点。同malloc一样,new没有初始化,但它对于自定义类型的处理要更好。C++的free就是delete。

	//int* p1 = (int*)malloc(sizeof(int));int* p1 = new int; //int* p2 = (int*)malloc(sizeof(int) * 7);int* p2 = new int[7];delete p1;delete[] p2;

写一个类

class A
{
public:A(int a = 0):_a(a){cout << "构造" << this << endl;}~A(){cout << "销毁" << this << endl;}
private:int _a;
};A* pp3 = (A*)malloc(sizeof(A));free(pp3);A* p3 = new A(1);delete p3;

malloc只是开空间,free只是释放空间,而new会调用构造函数和析构函数。

在这里插入图片描述

2、内存管理方式

new也可以初始化

	int* p1 = new int(10);int* p2 = new int[10];int* p3 = new int[10] {1, 2, 3, 4};

一个是初始化一个变量,一个是初始化一个数组,总共10个元素,第三个则是指定初始化,这里初始化了4个元素。

但不能交叉使用,用malloc,delete,系统会抽查错误,查到编译器就会出现奇怪的错误。

operator new operator delete

operator new 和operator delete是
系统提供的全局函数,new在底层调用operator new全局函数来申请空间,delete在底层通过operator delete全局函数来释放空间。

实际上它们不是new 和 delete的重载函数。on函数调用了malloc,如果调用失败就会执行用户提供的空间不足应对措施,如果用户提供该措施
就继续申请,否则就抛异常;而od函数就是一个free,在最终free前,它会检查代码。

所以实际上它们就是malloc和free的封装。

	int* p1 = (int*)operator new(sizeof(int));int* p2 = (int*)malloc(sizeof(int));

malloc失败时会返回空,而on会返回异常。

3、new和delete的实现原理

对于内置类型,new和malloc无区别,但对自定义类型有区别。new[]和delete[]实现的是连续空间的操作。

new的逻辑是先调用operator new,再malloc,再调用构造函数。delete的逻辑是先调用析构函数,再调用operator delete,也就是相当于free。

new/delete 和 malloc/free有不同的实现机制,尽量不交叉使用,以免出现不可控的错误。

new T[N]的原理

  1. 调用operator new[]函数,在operator new[]中实际调用operator new函数完成N个对
    象空间的申请
  2. 在申请的空间上执行N次构造函数

delete[]的原理
4. 在释放的对象空间上执行N次析构函数,完成N个对象中资源的清理
5. 调用operator delete[]释放空间,实际在operator delete[]中调用operator delete来释
放空间

new一个数组,编译器内部会多开四个字节的空间来存储元素个数,这是在手动写了析构函数的情况下,如果是自动析构函数,那么编译器就会评估一下是否需要这四个字节,比如类里没有对资源进行管理,那么就不需要析构函数,也就不会多开4个字节。

malloc/free和new/delete的共同点是:都是从堆上申请空间,并且需要用户手动释放。不同的地
方是:

  1. malloc和free是函数,new和delete是操作符
  2. malloc申请的空间不会初始化,new可以初始化
  3. malloc申请空间时,需要手动计算空间大小并传递,new只需在其后跟上空间的类型即可,
    如果是多个对象,[]中指定对象个数即可
  4. malloc的返回值为void*, 在使用时必须强转,new不需要,因为new后跟的是空间的类型
  5. malloc申请空间失败时,返回的是NULL,因此使用时必须判空,new不需要,但是new需
    要捕获异常
  6. 申请自定义类型对象时,malloc/free只会开辟空间,不会调用构造函数与析构函数,而new
    在申请空间后会调用构造函数完成对象的初始化,delete在释放空间前会调用析构函数完成
    空间中资源的清理

结束。

http://www.15wanjia.com/news/23689.html

相关文章:

  • 国外做问卷调查的网站免费网站可以下载
  • 西安做网站公司报价免费b站推广网站2022
  • 网站的管理与维护优化大师win7
  • 哪个网站可以做练习题平台推广方式方法是什么
  • windows搭建php网站资源企业网站排名优化价格
  • 做印刷厂网站查询seo
  • 交易服务型b2b电子商务网站谷歌搜索入口365
  • wordpress收录p公司网络优化方案
  • 前端网站开发课程河南新站关键词排名优化外包
  • 有没有什么东西可以做网站没经验怎么开广告公司
  • 网站建设需要会什么软件有哪些方面b站推广引流最佳方法
  • 网站开发相关文献手游cpa推广平台
  • 网站制作模板下载培训体系包括四大体系
  • 做电子书的网站很有名后来被关闭了怎样做一个网页
  • 盐城网站推广销售培训
  • 局域网如何做视频网站建设网络促销策略
  • 经营性 网站备案哪家公司做推广优化好
  • 3d做网站刷粉网站推广便宜
  • 网站如何做修改密码的相关验证广告公司接单软件
  • 网站icp备案信息不能为空启动互联全网营销推广
  • 动画制作大师长沙seo代理商
  • 泾阳县住房和城乡建设局网站域名交易中心
  • 门户网站是以什么为主排名第一的手机清理软件
  • 网站缺点市场推广计划方案模板
  • 滁州哪里做网站bt樱桃 磁力岛
  • 徐州整站优化百度云网盘搜索引擎入口
  • 安徽建设厅网站种子资源
  • 网站建设的格式百度提交入口地址在哪
  • wordpress和phpmyadmin重庆seo整站优化报价
  • 海伦网站建设太原最新情况