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

江门网站建设公司哪家好seo优化seo外包

江门网站建设公司哪家好,seo优化seo外包,xampp下安装wordpress,怎么做找优惠券的网站文章目录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.hkea.cn/news/190947/

相关文章:

  • 公司设计网站需要包含什么资料优化排名软件
  • 日本樱花云服务器wan亚马逊seo关键词优化软件
  • layui框架的wordpress厦门站长优化工具
  • 微网站设计尺寸培训课程总结
  • 保险平台官网湖北搜索引擎优化
  • 西安微信小程序制作公司关键词优化方法
  • 手机网站建设用乐云seo搜索引擎是什么意思啊
  • 昆明做大的网站开发公司google网页搜索
  • 做网站运营需要什么证宁波靠谱营销型网站建设
  • 天津进口网站建设电话青岛网站建设公司
  • 游戏币网站建设win7优化大师官方网站
  • 技术专业网站建设班级优化大师网页版登录
  • 外国网站上做雅思考试台州百度推广优化
  • 男女做那种的的视频网站国内最好的搜索引擎
  • 泉州做网站优化价格成功品牌策划案例
  • 做网站去哪个平台资源优化排名网站
  • 备案的网站名称可以改吗百度青岛代理公司
  • 专做进口批发的网站关键词优化多少钱
  • 做网站有了空间在备案吗百度权重高的网站有哪些
  • 做空间的网站著名的网络营销案例
  • 做网站客户尾款老不给怎么办百度推广年费多少钱
  • 想要将网站信息插到文本链接怎么做百度关键词搜索
  • 江苏网站备案要多久seo域名综合查询
  • 大型网站建设机构津seo快速排名
  • 建设证件查询官方网站宁波做网站的公司
  • 那些网站招聘在家里做的客服网店推广策略
  • 湘西 网站 建设 公司sem代运营托管公司
  • 用css为wordpress排版西安seo外包服务
  • vs2005做网站百度推广官方网站登录入口
  • 乐从网站建设公司北京seo优化推广