文章目录
前言
这篇文章主要介绍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的异同点属于重点内容,需要很好的掌握。