【C++】动态内存管理 ② ( new 运算符 为 基础数据类型 / 基础数据数组类型 分配堆内存 )





一、C++ 对象的动态创建和释放



动态内存管理 在 C++ 语言中 , 就是通过 new 和 delete 运算符 进行对象的 创建 与 释放 ;

  • 通过 new 运算符 创建对象 , new 运算符 相当于 C 语言中的 malloc / calloc / realloc 等 申请内存的 标准库函数 ;
  • 通过 delete 运算符 释放对象 , delete 运算符 相当于 C 语言中的 free 释放内存的 标准库函数 ;

在 C++ 语言中 , 为了兼容 C 语言 , 仍然可以使用 malloc 和 free 函数动态管理内存 ,

但是 更建议 开发者在 C++ 程序开发时 , 使用 new 和 delete 运算符 进行 动态内存的管理 ;

不建议在 C++ 中使用 malloc 和 free 进行动态内存管理 ;


使用 new 和 delete 运算符 可以为如下类型的变量 动态分配内存 :

  • 类对象
  • 基础类型
  • 数组类型




二、new 运算符 为 基础数据类型 / 基础数据数组类型 分配堆内存




1、语法说明


new 运算符 分配堆内存 语法 : new 运算符 作用是 在 堆内存中 为某个类型分配 内存空间 ;

指针类型变量 = new 类型 ( 常量 )	// 创建 类 / 普通类型 变量
指针类型变量 = new 类型 			// 创建 类 / 普通类型 变量 , 省略 常量
指针类型变量 = new 类型 [ 数字 ]	// 创建数组 , 中括号中是 数组元素个数
  • 小括号 中的 常量值 是可以省略的 ;
  • 中括号 表示的是为 数组类型 分配内存空间 , 中括号内是 数组元素个数 ;

2、语法简单示例


new 运算符 使用示例 :

  • 创建 普通类型 变量 : 堆内存 中 创建 int 类型 存储空间 , 返回 指向该内存空间 的 指针 ( 空间地址 ) ;
int* ptr = new int;
  • 创建 普通类型 变量 并设置初始值 : 堆内存 中 创建 int 类型 存储空间 , 并为其设置初始值 9527 , 返回 指向该内存空间 的 指针 ( 空间地址 ) ;
int* ptr = new int(9527);
  • 创建 普通数组类型 变量 : 堆内存 中 创建 int 数组类型 存储空间 , 返回 指向该内存空间 的 指针 ( 空间地址 ) , 中括号中是 数组元素个数 ;
int* ptr = new int[8];
  • 创建 普通二维数组类型 变量 : 堆内存 中 创建 int 二维数组类型 存储空间 , 返回 指向该内存空间 的 指针 ( 空间地址 ) , 中括号中是 数组元素个数 ;
int* ptr = new int[4][8];

3、代码示例 - 基础类型内存分配


在 C 语言中使用 malloc 函数 动态申请堆内存 , 使用 free 函数 释放内存 ;

在 C++ 语言中 , 使用 new 基础数据类型 申请内存 ,

int* p2 = new int;

使用 delete(指针变量) 释放内存 ;

delete(p2);

代码示例 :

	// I. 基础类型内存分配
	
	// C 语言中动态申请内存
	int* p = (int*)malloc(sizeof(int));
	*p = 10;

	// C++ 语言中动态申请内存
	int* p2 = new int;
	*p2 = 20;

	cout << "*p = " << *p << " , *p2 = " << *p2 << endl;

	// C 语言中 释放内存 与 malloc 相对应
	free(p);

	// C++ 语言中 释放内存 与 new 相对应
	delete(p2);

4、代码示例 - 基础数组类型内存分配


在 C 语言中使用 malloc 函数 动态申请堆内存 , 使用 free 函数 释放内存 ;

在 C++ 语言中 , 使用 new 基础数据类型[数组元素个数] 申请内存 ,

int* array2 = new int[2];

使用 delete(指针变量) 释放内存 ;

delete(array2);

代码示例 :

	// II. 数组类型内存分配

	// C 语言中动态申请内存
	int *array = (int*)malloc(sizeof(int) * 2);
	array[0] = 9527;
	array[1] = 3859;

	// C++ 语言中动态申请内存
	int* array2 = new int[2];
	array2[0] = 1234;
	array2[1] = 5678;

	cout << "array[0] = " << array[0] << " , array2[0] = " << array2[0] << endl;

	// C 语言中 释放内存 与 malloc 相对应
	free(array);

	// C++ 语言中 释放内存 与 new 相对应
	delete(array2);




三、完整代码示例 - new 运算符 为 基础数据类型 / 基础数据数组类型 分配堆内存



代码示例 :

#include "iostream"
using namespace std;

int main()
{
    
    
	// I. 基础类型内存分配
	
	// C 语言中动态申请内存
	int* p = (int*)malloc(sizeof(int));
	*p = 10;

	// C++ 语言中动态申请内存
	int* p2 = new int;
	*p2 = 20;

	cout << "*p = " << *p << " , *p2 = " << *p2 << endl;

	// C 语言中 释放内存 与 malloc 相对应
	free(p);

	// C++ 语言中 释放内存 与 new 相对应
	delete(p2);

	// II. 数组类型内存分配

	// C 语言中动态申请内存
	int *array = (int*)malloc(sizeof(int) * 2);
	array[0] = 9527;
	array[1] = 3859;

	// C++ 语言中动态申请内存
	int* array2 = new int[2];
	array2[0] = 1234;
	array2[1] = 5678;

	cout << "array[0] = " << array[0] << " , array2[0] = " << array2[0] << endl;

	// C 语言中 释放内存 与 malloc 相对应
	free(array);

	// C++ 语言中 释放内存 与 new 相对应
	delete(array2);

	// 控制台暂停 , 按任意键继续向后执行
	system("pause");
	return 0;
}

执行结果 :

*p = 10 , *p2 = 20
array[0] = 9527 , array2[0] = 1234
Press any key to continue . . .

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/han1202012/article/details/133049120