文章目录
一、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 . . .