C++ | 高级教程 | 动态内存

👻 概念

程序中的内存分为两个部分:

  • **栈:**在函数内部声明的所有变量都将占用栈内存
  • **堆:**程序运行时用于动态分配内存

👻 运算符

  • new运算符 —— 动态分配内存

    new data-type;
    
  • delete 运算符 —— 释放内存

    delete pvalue;        // 释放 pvalue 所指向的内存
    

👻 变量 内存管理

👾单个变量

  • 分配内存
int* pvalue = NULL; 		// 初始化 null 指针
pvalue = new int;			// 请求内存
int* pvalue  = NULL; 		// 初始化 null 指针
if(!(pvalue = new int)) {	// 请求内存
	cout << "Error: out of memory." <<endl;
	exit(1);
}
  • 赋值
*pvalue = 10;			// 在分配的地址存储值
cout << "Value of pvalue : " << *pvalue << endl;
  • 释放内存
delete pvalue;				// 释放内存

👾一维数组

  • 分配内存
// 分配内存 数组长度为 m
int* array = new int[m];
  • 释放内存
// 释放内存
delete[] array;

👾二维数组

  • 分配内存
// 分配内存,数组第一维为 m,第二维为 n
int** array = new int* [m];
for(int i=0; i<m; i++) {
	array[i] = new int [n];
}
  • 释放内存
// 释放内存
for(int i=0; i<m; i++) {
	delete[] array[i];
}
delete[] array;

👾三维数组

  • 分配内存
// 分配内存,第一维为 m, 第二维为 n, 第三维为h 
int*** array = new int** [m];
for(int i=0; i<m; i++) {
	array[i] = new int* [n];
	for(int j=0; j<n; j++) {
		array[i][j] = new int [h];
	}
}
  • 释放内存
// 释放内存
for(int i=0; i<m; i++) {
	for(int j=0; j<n; j++) {
		delete[] array[i][j];
	}
	delete[] array[i];
}
delete[] array;

👻 对象 内存管理

// 类Box定义如下:
class Box {
	public:
		Box() { cout << "调用构造函数" <<endl; }
		~Box() { cout << "调用析构函数" <<endl; }
     	void display() { cout << "调用display函数" << endl; }
};

👾单个对象

// 分配内存
Box* box = new Box();
// 使用
box->display();
// 释放内存
delete box;
调用构造函数
调用析构函数

👾对象数组

// 分配内存
Box* boxs = new Box[4];
// 释放内存
delete[] boxs; 
调用构造函数
调用构造函数
调用构造函数
调用构造函数

调用析构函数
调用析构函数
调用析构函数
调用析构函数

👻 对比

分配内存使用释放内存
单个变量int* pvalue = NULL;
pvalue = new int;
*pvalue = 10;delete pvalue;
一维数组int* array = new int[m];delete[] array;
单个对象Box* box = new Box();box->display();delete box;
对象数组Box* boxs = new Box[4];delete[] boxs;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值