2.1面向对象程序设计基础(2)

xiaoxiao2021-02-28  106

2.1.3对象的动态建立与释放

全局数据区:全局变量、静态数据、常量 代码区:类成员函数、非成员函数代码 栈区:局部变量、函数参数、返回数据、返回地址 堆区:动态存储分配,建立后一定要释放(否侧会出现内存泄漏)


建立对象格式: CRectangle *pRect=new CRectangle; 或者: CRectangle *pRect=new CRectangle(40,10); ——->类名 *指针变量名= new 类名; 注:new 返回指针

释放对象格式: delete pRect; ——->delete 指针名字


1.一维对象数组动态内存的分配与释放 建立: CRectangle *pRect=new CRectangle[2]; 释放: delete[] pRect;

2.二维对象数组动态内存的分配与释放 建立:

类名 **指针变量名 = new 类名 *[行下标表达式(可以非常量)] for(int i=0;i<行向量表达式;i++) { 指针变量名[i]=new 类名 [列下标表达式];//相当于一个一维数组 } //先按行创建,后按列创建

释放:

for(int i=0;i<行下标表达式;i++) { delete[]指针变量名[i]; } delete[]指针变量名; //先按列释放,后按行释放

注意:由堆创建的对象数组,只能调用默认的构造函数。如果没有默认构造函数,不能创建对象数组。

实例:

#include <iostream> using namespace std; class CBucket//定义桶类 { public: int ScanLine;//申明扫描线位置 CBucket *pNext;//申明下一桶节点的指针 }; int main () { CBucket *pHead=new CBucket,*pCurrentB;//定义桶节点的头指针和当前指针 pCurrentB=pHead; pCurrentB->ScanLine=1;//第一个扫描线为1 cout<<"第一个节点的扫描线位置是:" <<pCurrentB->ScanLine<<endl; pCurrentB->pNext=new CBucket;//为当前指针的pNext指针新建节点 pCurrentB=pCurrentB->pNext;//当前指针后移 pCurrentB->ScanLine=2; cout<<"第二个节点的扫描线位置是:" <<pCurrentB->ScanLine<<endl; pCurrentB->pNext=NULL;//只构造两个节点 delete pHead; delete pCurrentB;//当前的指针指向的内存也是由new生成的,也要delete pHead=NULL; pCurrentB=NULL;//这两个指针没有撤销,不要让他们乱指 return 1; }
转载请注明原文地址: https://www.6miu.com/read-62843.html

最新回复(0)