所谓动态数据结构,是指在运行时刻才能确定所需内存空间大小的数据结构,动态数据结构所使用的的内存称为动态内存。动态内存的使用有一定的危险,必须遵守一定的规则。动态申请的内存在不需要时必须及时释放,如果不断地申请动态内存而不加以释放,将导致内存资源的枯竭。

        c++处理动态内存提供了一对操作符new和delete。new操作符用于动态申请内存,而delete操作符则用来释放动态申请的内存。如果对象中为指针型属性申请了动态内存,则必须在析构函数中加以释放。

        在c++中,动态内存和指针变量是密切相关的,将指针变量和c++中的new和delete操作符结合起来,用来申请和释放动态内存。

        在程序运行过程中,当确定了数据所需内存空间的大小后,可以用new操作符请求系统分配足够的内存以存放该数据,并返回指向新申请到的内存区域的指针,如果申请不成功(这通常是因为内存空间不够),则返回空指针NULL。

        例如,下面的程序段中,new以数据类型T为参数,为类型为T的变量申请内存,返回得到内存地址。

        T*p;        //定义p为指向T的指针

        p=new T;//p为类型T数据的内存地址

         又如,当p1和p2分别为指向int和long类型数据的指针时,操作符new可以为它们分别申请相应的内存空间并将其他地址分别赋给p1和p2。

        int*p1;          //定义p1为指向int(2字节大小)的指针

        long*p2;       //定义p2为指向long(4字节大小)的指针

        p1=new int;  //p1指向内存中的一个整数

        p2=new long;//p2指向内存中的一个长整数

        默认情况下,new申请的内存中的内容没有初值,如果需要初值,必须使用操作符new的参数形式:

        p=new T(value);

         如下述操作:

        p1=new int(100);

        为整数申请内存并对其赋初值100,p1指向一个初值为100的整数。在c++中,不仅可以动态申请简单数据类型的内存空间,也可以申请复杂的数据类型,如动态数组的申请。程序中需要申请动态数组时,可用带方括号“[ ]”的new操作符为数组申请内存。例如:

        T*p;              定义p为指向T的指针

        p=new T[n];  为类型为T的n元数组申请内存

        将p指向数组的第一个元素。和简单数据类型不同,用这种方法申请数组时不能指定初始值。当申请的动态内存不再需要时,使用delete操作符加以释放。需要注意的是,delete的使用形式必须和new相匹配。例如:

        T*p1,*p2;       //p1和p2均为指向类型T的指针

        p1=new T;      //p1指向一个类型为T的数据

        p2=new T[n];  //p2指向一个类型为T的n元数组

        操作符delete使用这些指针来释放为它们申请的内存,但在释放数组时,必须与“[ ]”运算符结合使用:

        delete p1;//释放p1指向的简单变量空间

        delete [ ] p2; //释放p2指向的数组变量空间