2.1面向對象程序設計基礎(2)

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;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章