C++中有3种管理数据内存的方式:自动存储、静态存储和动态存储(有时叫做自由存储空间和堆)
1、自动存储
在函数内部定义的常规变量使用自动存储空间,被称为自动变量这意味着他们所属的函数被调用时自动产
生,在函数结束时消亡,如下面程序中的temp数组,当且仅当temp数据活动时存在。当程序控制权回到main时
temp使用的内存将被自动释放。如果getname()返回的是temp的地址,在main中temp的地址将很快得到重新
使用。
2、静态存储
静态存储是整个程序执行期间都存在的存储方式。使变量成为静态变量的方式有两种,一种是在函数外面定义它,另外一种是使用关键字static: static double fee = 56.50;
3、动态存储
new和delete 操作符提供了一种比自动变量和静态变量更灵活的方式。他们管理一个内存池,这在C++中被称为自由存储空间。内存池同用于静态变量和自动变量的内存是分开的。下面的程序可以表明new和delete允许在一个函数中分配内存,而在另外一个函数中是释放它。因此数据的生命周期就不完全受到程序或者函数的生存时间的控制。与使用常规变量相比,使用new和delete使程序员对程序如何使用内存有更大的把握空间。
//delete.cpp --using the delete operator
#include<iostream>
#include<cstring>
using namespace std;
char * getname(void);
int main()
{
char * name;
name = getname();
cout << name <<" at " <<(int *)name <<"\n";
delete [] name;
name = getname();
cout << name << " at " <<(int *)name <<"\n";
delete [] name;
return 0;
}
char *getname()
{
char temp[80];
cout <<" Enter last name: ";
cin >> temp;
char *pn = new char[strlen(temp)+1];
strcpy(pn,temp);
return pn;
}