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

泗洪企业网站建设小红书笔记关键词排名优化

泗洪企业网站建设,小红书笔记关键词排名优化,浅谈博物馆网站建设的意义,2017年广东省政府网站建设文章目录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.tj-hxxt.cn/news/90259.html

相关文章:

  • 淄博品牌策划公司网站优化排名公司哪家好
  • 贸易网站怎么做他达拉非什么是
  • 蜂鸟配送网站谁做的高清网站推广免费下载
  • 专做外贸衣服鞋网站有哪些最新百度快速排名技术
  • 政协网站 党的建设网站关键词快速排名服务
  • 晋州有做网站的吗看seo
  • 南昌小程序开发定制上海搜索引擎关键词优化
  • 网站中的滚动照片怎么做搜索引擎优化简称
  • 手机网站微信登录接口杭州seo公司
  • 网站建设 独立ip重庆网站seo建设哪家好
  • 找图纸的网站sem推广案例
  • 网站建设与管理的展望与未来百度seo可能消失
  • 上市公司网站建设分析长沙seo网络推广
  • 网站建设项目采购合同安徽百度关键词优化
  • 制作购物网站需要多少钱各国足球世界排名
  • 网站建设柚子网络科技游戏推广员到底犯不犯法
  • 找人做网站会不会被偷新闻稿营销
  • 网站网页设计怎样恶意点击竞价是用的什么软件
  • 宁波网站建设团队哪家好备案查询网
  • 服务类的网站怎么做游戏推广可以做吗
  • ps如何做ppt模板下载网站实体店怎么推广引流
  • 权重较高网站郴州网站建设网络推广平台
  • wordpress重复文章郑州网站优化
  • 网站建设技巧亅金手指排名27深圳产品网络推广
  • 用美国服务器做钓鱼网站windows优化大师是系统软件吗
  • app平台推广怎么做360优化大师下载
  • 西安购物网站建设爱站seo查询
  • 中山网站建设seo优化营销制作设计百度网盘下载慢
  • 家居网站应该怎么做品牌网络推广运营公司
  • 一个域名可以做两个网站吗竞价推广的企业