【C++】-动态内存管理

作者:小树苗渴望变成参天大树
作者宣言:认真写好每一篇博客
作者gitee:gitee
【C++】-动态内存管理_第1张图片
如 果 你 喜 欢 作 者 的 文 章 ,就 给 作 者 点 点 关 注 吧!

文章目录

  • 前言
  • 一、C++内存管理方式
    • 1.1 new/delete操作内置类型
  • 总结


前言

今天再讲一个老朋友,但是这个老朋友变得比原来更加的优秀了,盖头换面了,还是同一个人,那接下来让我们来看看他的真面目。在C语言说的可以看这篇C语言的动态内存管理


一、C++内存管理方式

C语言内存管理方式在C++中可以继续使用,但有些地方就无能为力,而且使用起来比较麻烦,因
此C++又提出了自己的内存管理方式:通过new和delete操作符进行动态内存管理。

1.1 new/delete操作内置类型

// 动态申请一个int类型的空间
		int* ptr1 = new int;
		int* ptr2 = new int[1];


		// 动态申请一个int类型的空间并初始化为10
		int* ptr3 = new int(10);//这种写法只限一个元素的初始化
		int* ptr4 = new int[1]{ 10 };//这种初始化也行


		// 动态申请n个int类型的空间
		int* ptr5 = new int[3]{10,10,10};//动态申请3个int类型的空间并初始化为10
		int* ptr6 = new int[6]{ 10,10,10 };//动态申请6个int类型的空间并初始化为
		                                   //前三个初始化为10,后三个默认为0

		delete ptr1;
		delete[] ptr2;
		delete ptr3;
		delete[] ptr4;
		delete[] ptr5;
		delete[] ptr6;

【C++】-动态内存管理_第2张图片
对于内置类型new和malloc没有什么区别,new可以进行初始化,而且使用起来也很方便,他不需要计算类型的大小,可以自动识别大小,对于内置类型的使用就这些,我们来看看自定义类型

class A
{
public:
 A(int a = 0)
 : _a(a)
 {
 cout << " A(int a = 0):" << this << endl;
 }
 ~A()
 {
 cout << "~A():" << this << endl;
 }
private:
 int _a;
};

【C++】-动态内存管理_第3张图片

【C++】-动态内存管理_第4张图片
对于new和malloc会调用构造函数和析构函数,这和malloc和free最大的差别,所以初始化的方式和之前的差不多,注意一些细节就好了

交叉使用会出现什么情况
对于C语言malloc和free是一对,对于C++new和delete是一对,实现的目的都是一样的,一个是开空间,一个是释放空间,我们来看看交叉使用会出现什么情况
【C++】-动态内存管理_第5张图片
对于只开辟一个类型空间大小,不管内置类型和自定义类型都没有任何影响,但是开多个类型空间,就回报错,所以大家还是不要交叉使用了。

总结

【C++】-动态内存管理_第6张图片

你可能感兴趣的:(C++初阶,c++,java,开发语言)