刷野打怪上王者·C++篇·第25期·动态内存处理

参考链接

RUNOOB.COM

动态内存处理 

    为什么会有这么一个概念呢?我们在写程序的时候,有的时候很难提前预知定义的变量需要申请多少内存,只有在程序运行的过程才能够确定。需要说明一点,在C++中内存由两部分组成:。其中,函数内声明的所有变量使用来存储;对于程序未使用的可用于动态分配的内存则有完成。

    要进行动态申请内存,C++提供了空间分配new运算符,还提供了删除分配的空间运算符delete。下面我们将从数据类型数组类对象的动态内存处理进行详细分析一下:

数据类型动态内存处理

直接在程序实例中学习:

#include <iostream>

using namespace std;

int main()
{
	double *dData = new double;    //数据类型的动态分配空间    new 数据类型
	*dData = 5.6;
	cout << *dData << endl;

	delete dData;                 //释放申请的数据类型空间     delete 指针名

	getchar();
}

运行结果

5.6

数组动态内存处理

#include <iostream>

using namespace std;

int main()
{
	int *iArray1;
	int **iArray2;
	int  ***iArray3;

	/*一维数组处理*/
	iArray1 = new int[5];
	for (int id = 0; id < 5; id++)  //想分配的数组内存复制
	{
		iArray1[id] = id;
		cout << iArray1[id] << "   ";
	}

	delete[] iArray1;               //释放分配的内存

	cout << endl << endl;

	/*二维数组处理*/
	iArray2 = new int *[5];
	for (int id = 0; id < 5; id++)
		iArray2[id] = new int[2];

	for (int idx = 0; idx < 5; idx++)  //想分配的数组内存复制
	{
		for (int idy = 0; idy < 2; idy++)
		{
			iArray2[idx][idy] = idx + idy;
			cout << iArray2[idx][idy] << "   ";
		}
		cout << endl;
	}
	for (int id = 0; id < 5; id++)    //释放分配的内存(在这里一层层的释放)
		delete[] iArray2[id];
	delete[] iArray2;

	cout << endl;
	/*三维数组处理*/
	iArray3 = new int **[3];
	for (int idx = 0; idx < 3; idx++)
	{
		iArray3[idx] = new int *[3];
		for (int idy = 0; idy < 3; idy++)
			iArray3[idx][idy] = new int [3];
	}
	for (int idx = 0; idx < 3; idx++)  //想分配的数组内存复制
	{
		for (int idy = 0; idy < 3; idy++)
		{
			for (int idz = 0; idz < 3; idz++)
			{
				iArray3[idx][idy][idz] = idx + idy + idz;
				cout << iArray3[idx][idy][idz] << "   ";
			}
			cout << endl;
		}
		cout << endl;
	}
		
	for (int idx = 0; idx < 3; idx++)     //释放分配的内存
	{
		for (int idy = 0; idy < 3; idy++)
			delete[] iArray3[idx][idy];
		delete[] iArray3[idx];
	}
	delete[] iArray3;

	getchar();
}

运行结果

0   1   2   3   4

0   1
1   2
2   3
3   4
4   5

0   1   2
1   2   3
2   3   4

1   2   3
2   3   4
3   4   5

2   3   4
3   4   5
4   5   6

类对象动态内存处理

这里其实在前面讲解类的时候已经使用过,下面我在使用简单程序看一下:

#include <iostream>

using namespace std;


class printClass
{
public:
	printClass();
	~printClass();
	void printInfo()
	{
		cout << "天眼工作室" << endl;
	}
private:

};

printClass::printClass(){}

printClass::~printClass(){}

int main()
{
	printClass *printVar = new printClass();   //对象创建动态内存
	printVar->printInfo();

	delete [] printVar;                      //释放申请的对象空间                 

	getchar();
}

运行结果

天眼工作室
发布了176 篇原创文章 · 获赞 24 · 访问量 5万+

猜你喜欢

转载自blog.csdn.net/CSS360/article/details/104286094