C++内存管理


前言

  这篇文章主要介绍C++内存管理,主要讲解C++中new ,delete的用法以及其与C语言中malloc和free的区别。


提示:以下是本篇文章正文内容,下面案例可供参考

一、new delete的使用

  new操作符可以向内存申请空间,delete可以释放空间。他们的使用方式如下面的代码:

int* ptr1 = new int;
int* ptr2 = new int(1);
delete ptr1;
delete ptr2;

int* ptr3 = new int[3];
delete[] ptr3;

在这里插入图片描述

二、operator new operator delete

  new 和 delete 操作底层调用了operator new 和 operator delete全局函数。operator new 和 operator delete可以简单理解为封装的malloc和free函数,相较与malloc和free函数多了一个异常捕捉功能。这两个函数的使用方法和malloc和free是一样的。代码如下:

int* aa = (int*)operator new(sizeof(int));
operator delete(aa);

三、new delete 原理

(一)内置类型

  对于内置类型而言,new和delete操作和malloc free是差不多的。

(二)自定义类型

  对于自定义类型而言,
  new会调用operator new申请空间,然后调用构造函数。
  delete会调用析构函数,然后调用operator delete函数释放空间。
  new[] 会先调用operator new[]申请空间,operator new[] 调用 operator new申请多个空间,然后再调用多次构造函数。
  delete[] 会调用多次析构函数,然后调用operator delete[] 释放空间,operator delete[]会调用operator delete函数释放空间。

四、 定位new表达式

  定位new表达式是方便我们显示调用构造函数。他的使用方法:new(ptr)type,下面的代码就帮助我们完成自定义类型的显示构造函数调用。

	A* ptr = (A*)operator new(sizeof(A));
	new(aa)A(10);

五、new delete 和malloc free的异同点

相同:new delete 和 malloc free 都是向堆申请和释放空间。
  ①new delete 是操作符,而malloc free是函数 操作符不需要包含头文件就可以使用,而malloc 和free 是需要包含头文件的。
  ②new delete 失败会抛出异常,而malloc申请空间失败会返回NULL
  ③new 申请空间只需要输入个数就行,而malloc申请空间必须计算大小。
  ④new 申请空间不需要强制类型转化,而malloc申请空间返回void* ,需要根据需求强制类型转化。
  ⑤new 和delete 不仅仅会申请和释放空间,还会调用构造函数和析构函数,而malloc free不会。

总结

  这边文章主要讲了C++内存管理,讲解了new 和delete 的用法,其中new delete 和malloc free的异同点属于重点内容,需要很好的掌握。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值