C++ 程序中的内存分为两个部分:
a.栈:在函数内部声明的所有变量都将占用栈内存。 b.堆:这是程序中未使用的内存,在程序运行时可用于动态分配内存。
1.new 运算符
为给定类型的变量在运行时分配堆内的内存,返回所分配的空间地址。
检查 new 运算符是否返回 NULL 指针,并采取以下适当的操作:
double* pvalue = NULL; if( !(pvalue = new double )) { cout << "Error: out of memory." <<endl; exit(1); }
注意:
关于malloc()函数:malloc() 函数在 C 语言中就出现了,在 C++ 中仍然存在,但建议尽量不要使用 malloc() 函数。
new不仅分配了内存,还创建了对象。
2.delete 运算符
释放它所占用的内存
#include <iostream> using namespace std; int main () { double* pvalue = NULL; // 初始化为 null 的指针 pvalue = new double; // 为变量请求内存 *pvalue = 29494.99; // 在分配的地址存储值 cout << "Value of pvalue : " << *pvalue << endl; delete pvalue; // 释放内存 return 0; }
3.数组的动态内存分配
a.一维数组
char* pvalue = NULL; // 初始化为 null 的指针 pvalue = new char[20]; // 为变量请求内存 // 动态分配,数组长度为 m int *array=new int [m]; //释放内存 delete [] array;
b.二维数组(特别注意,二维数组删除时需要按维度删除)
int **array // 假定数组第一维长度为 m, 第二维长度为 n // 动态分配空间 array = new int *[m]; for( int i=0; i<m; i++ ) { array[i] = new int [n] ; } //释放 for( int i=0; i<m; i++ ) { delete [] arrar[i]; } delete [] array;
c.三维数组(同二维)
int ***array; // 假定数组第一维为 m, 第二维为 n, 第三维为h // 动态分配空间 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;
d.对象内存分配
分配方式相同,只是删除时需要注意。
delete ptr // 代表用来释放内存,且只用来释放ptr指向的内存。 delete[] rg // 用来释放rg指向的内存,还逐一调用数组中每个对象的 destructor!! int/char/long/int*/struct 等等简单数据类型,由于对象没有 destructor,所以用 delete 和 delete [] 是一样的!
时间: 2024-10-16 01:47:46