通常定义变量(或对象)后,编译器在编译时都可以通过该变量(或对象)的类型知道所需内存空间的大小,从而系统在适当的时候为他们分配确定的存储空间。这种内存分配称为静态存储分配。
有些操作对象只在程序运行时才能确定,这样编译时就无法为他们预定存储空间,只能在程序运行时,系统根据运行时的要求进行内存分配,这种方法称为动态存储分配。
C++程序中的内存分为两个部分:
在c++中,可以使用特殊的运算符为给定类型的变量在运行时分配堆内的内存,这会返回所分配的空间地址,这种运算符即new运算符,如果不再需要动态分配的内存空间,可以使用delete运算符,删除之前由new运算符分配的内存。
double* p=NULL;
p=new double;
delete p; //释放
int* p= NULL;
p=new int[20];
delete[] p; //释放
int **p;
int m,n; //第一维为m,第二维为n
//首先申请行的内存空间
p=new int*[m];
//其次申请列的内存空间
for(int i=0;i<m;i++){
p[i]=new int[n];
}
//最后对二维数组进行释放
for(int i=0;i<m;i++){
delete[] p[i];
}
delete[] p;
int ***p;
int x,y,z; //数组的第一维为x,第二维为y,第三维为z
p=new int**[x];
for(int i=0;i<x;i++){
p[i]=new int*[y];
for(int j=0;i<y;j++){
p[i][j]=new int[z];
}
}
//释放
for(int i=0;i<x;i++){
for(int j=0;j<y;j++){
delete[] p[i][j];
}
delete[] p[i];
}
delete[] p;
#include
#include
using namespace std;
class Student{
string sname;
public:
Student(string name){
sname=name;
}
string show(){
return sname;
}
};
int main()
{
Student *stu=new Student("david");
if(!stu){
cout << "动态内存分配失败!" << endl;
return 1;
}
cout << "name="<<stu->show() << endl;
return 0;
}