IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> C++内存的手动分配与释放 -> 正文阅读

[C++知识库]C++内存的手动分配与释放

C++的内存管理,相对于高级语言Java、C#等有自己的GC回收机制而言,C++是需要程序员更主动来管理内存。查资料说C++的内存管理,有很多种:手动、RAII释放、scope_guard/defer释放技术、Boehm GC库等。一个好的C++资源管理策略,对您的游戏性能影响是非常大的。

本篇主要介绍手动分配与释放内存案例。new与delete运算符地运用。

/*
* Author:W;
* 内存手动管理
* 1.内存分配:new 运算符,为给定类型的变量在运行时分配堆内的内存,并返回所分配的空间地址。
* 2.内存回收:delete 运算符。当不再需要动态分配的内存空间时。
*/

//引入标准输入输出流
#include <iostream>
using namespace std;

/*箱子*/
class Box
{
public:
	Box();
	~Box();

private:
	int id;
};

Box::Box()
{	
	cout << "创建Box实例:" << endl;
}

Box::~Box()
{
	cout << "销毁Box实例" << endl;
}

//main程序执行入口函数
int main()
{
	cout << "===1.基本数据类型的内存分配与回收===" << endl;
	//1.基本数据类型的内存分配与回收
	int* num = NULL;
	num = new int;//手动分配内存
	*num = 5;
	cout << "num = " << *num << endl;
	delete num;//手动释放内存


	cout << "===2.数组的内存分配与回收===" << endl;
	//2.数组的内存分配
	/*====一维数组====*/
	cout << "一维数组内存分配与回收" << endl;
	int* arr1 = new int[5];//手动申请数组内存

	for (int i = 0; i < 5; i++)
	{
		arr1[i] = i + 1;
	}

	for (int i = 0; i < 5; i++)
	{
		cout << "arr1[" << i << "] = " << arr1[i] << endl;
	}

	//手动释放数组内存
	delete [] arr1;

	cout << "二维数组内存分配与回收" << endl;
	/*====二维数组====*/
	int** arr2 = NULL;
	//手动申请二维数组内存
	int x = 2;
	int y = 3;
	arr2 = new int*[x];
	for (int i = 0; i < x; i++)
	{
		arr2[i] = new int[y];
	}

	//赋值
	for (int i = 0; i < x; i++) {
		for (int j = 0; j < y; j++) {

			arr2[i][j] = j * i;
		}
	}

	//打印
	for (int i = 0; i < x; i++) {
		for (int j = 0; j < y; j++) {

			cout << "arr2[" << i << "][" << j << "] = " << arr2[i][j] << endl;
		}
	}

	//手动释放二维数组的内存
	for (int i = 0; i < x; i++)
	{
		delete [] arr2[i];
	}
	
	delete [] arr2;

	cout << "三维数组内存分配与回收" << endl;
	/*====三维数组====*/
	int*** arr3 = NULL;
	int a = 2;
	int b = 2;
	int c = 2;

	//手动分配内存
	arr3 = new int** [a];
	for (int i = 0; i < a; i++)
	{
		arr3[i] = new int* [b];
		for (int j = 0; j < b; j++)
		{
			arr3[i][j] = new int[c];
		}
	}
	
	//赋值
	for (int i = 0; i < a; i++)
	{
		for (int j = 0; j < b; j++)
		{
			for (int k = 0; k < c; k++)
			{
				arr3[i][j][k] = i + j + k;
			}
		}
	}

	//打印
	for (int i = 0; i < a; i++)
	{
		for (int j = 0; j < b; j++)
		{
			for (int k = 0; k < c; k++)
			{				
				cout << "arr3[" << i << "][" << j << "][" << k << "] = " << arr3[i][j][k] << endl;
			}
		}
	}

	//手动释放内存
	for (int i = 0; i < a; i++)
	{
		for (int j = 0; j < b; j++)
		{
			delete[] arr3[i][j];
		}
	}

	for (int i = 0; i < a; i++)
	{
		delete [] arr3[i];
	}

	delete[] arr3;


	cout << "===3.对象的内存分配与回收===" << endl;
	//3.对象的内存分配与回收
	Box* boxArr = new Box[3];

	//对象数组内存释放
	delete [] boxArr;
}



运行结果如下:

?

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-08-06 09:26:01  更:2021-08-06 09:29:06 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/8 21:30:15-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码