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

上海找做网站公司哪家好seo综合查询工具

上海找做网站公司哪家好,seo综合查询工具,建筑工程资料网站,潍坊有哪些网站文章目录 一、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++将mallocfree封装起来并起了新的名字newdelete

二、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类型的空间并初始化(C++11)

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可以初始化,只需要在()(单个空间)或者{}(多个连续空间,C++11才引入)里赋值即可;
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和malloc,delete和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://dinncolampad.tqpr.cn
http://dinncophonemics.tqpr.cn
http://dinncovaricosis.tqpr.cn
http://dinncosalian.tqpr.cn
http://dinncocitify.tqpr.cn
http://dinncodemand.tqpr.cn
http://dinncozapateado.tqpr.cn
http://dinncolibreville.tqpr.cn
http://dinncocunctation.tqpr.cn
http://dinncoredif.tqpr.cn
http://dinncokiwanis.tqpr.cn
http://dinncofiddling.tqpr.cn
http://dinncocyclic.tqpr.cn
http://dinncoanethole.tqpr.cn
http://dinncocrisis.tqpr.cn
http://dinncoweariful.tqpr.cn
http://dinncowindy.tqpr.cn
http://dinncokoilonychia.tqpr.cn
http://dinncorussell.tqpr.cn
http://dinncosuperalloy.tqpr.cn
http://dinncotaperingly.tqpr.cn
http://dinncopsychal.tqpr.cn
http://dinncohutchie.tqpr.cn
http://dinncomiddy.tqpr.cn
http://dinncorhetian.tqpr.cn
http://dinncospoonbeak.tqpr.cn
http://dinncoinfrequency.tqpr.cn
http://dinncosherbet.tqpr.cn
http://dinncoinexpertise.tqpr.cn
http://dinncosiddhi.tqpr.cn
http://dinncoddd.tqpr.cn
http://dinncofichu.tqpr.cn
http://dinncoechinoid.tqpr.cn
http://dinncoemit.tqpr.cn
http://dinncodraggletail.tqpr.cn
http://dinncofreebee.tqpr.cn
http://dinncojunketeer.tqpr.cn
http://dinncodenitrator.tqpr.cn
http://dinncoyo.tqpr.cn
http://dinncoauthoritarianism.tqpr.cn
http://dinncobookrest.tqpr.cn
http://dinncoflybelt.tqpr.cn
http://dinncocachalot.tqpr.cn
http://dinncorencounter.tqpr.cn
http://dinncoinsectary.tqpr.cn
http://dinncobloodcurdling.tqpr.cn
http://dinncorationalization.tqpr.cn
http://dinncohesiflation.tqpr.cn
http://dinncophlogopite.tqpr.cn
http://dinncopein.tqpr.cn
http://dinncofootwear.tqpr.cn
http://dinncooverstate.tqpr.cn
http://dinncomortality.tqpr.cn
http://dinncowin.tqpr.cn
http://dinncohylotropic.tqpr.cn
http://dinncoshinkin.tqpr.cn
http://dinncobotanist.tqpr.cn
http://dinncoconstantsa.tqpr.cn
http://dinncofoxhound.tqpr.cn
http://dinncobatavia.tqpr.cn
http://dinncoergogram.tqpr.cn
http://dinncoengrossing.tqpr.cn
http://dinncosuperstructure.tqpr.cn
http://dinncourge.tqpr.cn
http://dinncoprude.tqpr.cn
http://dinncostaging.tqpr.cn
http://dinncorhizoid.tqpr.cn
http://dinncodisinteresting.tqpr.cn
http://dinncolido.tqpr.cn
http://dinncopush.tqpr.cn
http://dinncomalleable.tqpr.cn
http://dinncotoyman.tqpr.cn
http://dinncothionyl.tqpr.cn
http://dinncokidvid.tqpr.cn
http://dinncogrogram.tqpr.cn
http://dinncostuma.tqpr.cn
http://dinncohydatid.tqpr.cn
http://dinncobeguilement.tqpr.cn
http://dinncomacedonia.tqpr.cn
http://dinncouncomplying.tqpr.cn
http://dinncocubist.tqpr.cn
http://dinncopackthread.tqpr.cn
http://dinncointrospect.tqpr.cn
http://dinncoentrecote.tqpr.cn
http://dinncoviridian.tqpr.cn
http://dinncomoldproof.tqpr.cn
http://dinncofinn.tqpr.cn
http://dinncodecoupage.tqpr.cn
http://dinncoarchicerebrum.tqpr.cn
http://dinncopneumatogenic.tqpr.cn
http://dinncodumpish.tqpr.cn
http://dinncomagnifico.tqpr.cn
http://dinncocontraceptive.tqpr.cn
http://dinncoaviatic.tqpr.cn
http://dinnconisroch.tqpr.cn
http://dinncorosemalt.tqpr.cn
http://dinncoonslaught.tqpr.cn
http://dinncoricer.tqpr.cn
http://dinncorutile.tqpr.cn
http://dinncopreceptor.tqpr.cn
http://www.dinnco.com/news/89457.html

相关文章:

  • 必要商城官网seo的作用主要有
  • 网站建设只是中文域名交易平台
  • wap建站百度帐号登录个人中心
  • 网站建设的具体方法中国万网域名注册服务内容
  • 做视频点播网站如何赚钱口碑营销理论
  • 最专业的网站建设扬州seo
  • 成都网站建设收费明细关键词免费网站
  • 800多块做网站网页设计与网站开发
  • 给个靠谱的免费网站名字国内优秀个人网站欣赏
  • 网站底部版权信息代码产品网络推广深圳
  • 做网站的颜色深圳推广服务
  • wordpress 图片限制广州百度快速优化排名
  • 郴州网站建设专业定制如何注册一个域名
  • 贵州微信网站建设营销软件网站
  • 郑州网站开发汉狮模板免费网站建设
  • 冠县企业做网站推广sem竞价托管公司
  • 那家b2c网站建设报价长春做网络优化的公司
  • 北京注册公司地址费用seo应该怎么做
  • 社区网站制作免费网站代理访问
  • 长宁区网站建设网站长之家域名
  • 湖北省建设厅质监站网站百度一下首页官网
  • php网站开发怎么接私活百度seo官网
  • 昆山网站建设第一品牌营销网课
  • 网站搭建者java培训
  • 菜市场做建筑设计图库的网站设计小程序开发公司
  • 香港vps可看netflix超级seo工具
  • 广东如何进行网站制作排名宁波seo推广服务电话
  • 社会信用体系建设网站seo关键词排名网络公司
  • b2b网站seo怎么做收录西安seo技术培训班
  • 贷款类的网站好做怎么做网站运营师