C++ 的 new 與 delete 的疑惑?? |
尚未結案
|
scottish
一般會員 發表:2 回覆:1 積分:0 註冊:2004-04-06 發送簡訊給我 |
當我們在heap中new一個物件後,
如果要將之歸還,只須直接delete即可
例如:
int *pi = new int;
delete pi; 而當我們在heap中new一個陣列後,
如果要將之delete則只須在其前面加個下標符號,
例如:
int *pia = new int[12];
delete []pia; 但是,當我們在heap中new一個「指標」陣列後,
該如何將之delete呢?
例如:
int *piaa[12]; //宣告一個包含12個整數指標的陣列
for(int i=0;i<12;i ) piaa[i]= new int(0); 那麼,究竟我該如何delete它呢?
delete []piaa; 或是
for(int i=0;i<12;i ) delete piaa[i]; p.s 上面的用法很奇怪,但我是用在我自己的class,而不是int
|
pwipwi
版主 發表:68 回覆:629 積分:349 註冊:2004-04-08 發送簡訊給我 |
引言: 但是,當我們在heap中new一個「指標」陣列後, 該如何將之delete呢? 例如: int *piaa[12]; //宣告一個包含12個整數指標的陣列 for(int i=0;i<12;i ) piaa[i]= new int(0); 那麼,究竟我該如何delete它呢? delete []piaa; 或是 for(int i=0;i<12;i ) delete piaa[i]; p.s 上面的用法很奇怪,但我是用在我自己的class,而不是intpiaa指標本身的實體是在Stack中,不需要delete 但是piaa[i]指向的位置是在heap中,需要delete 後者才是正確的 |
jcjroc
高階會員 發表:21 回覆:279 積分:115 註冊:2002-09-18 發送簡訊給我 |
引言: 當我們在heap中new一個物件後, 如果要將之歸還,只須直接delete即可 例如: int *pi = new int; delete pi; 而當我們在heap中new一個陣列後, 如果要將之delete則只須在其前面加個下標符號, 例如: int *pia = new int[12]; delete []pia; 但是,當我們在heap中new一個「指標」陣列後, 該如何將之delete呢? 例如: int *piaa[12]; //宣告一個包含12個整數指標的陣列 for(int i=0;i<12;i ) piaa[i]= new int(0); 那麼,究竟我該如何delete它呢? delete []piaa; 或是 for(int i=0;i<12;i ) delete piaa[i]; p.s 上面的用法很奇怪,但我是用在我自己的class,而不是int又是一個對指標的指標不清楚的人 這樣解釋好了 int* piaa[12]; for(int i=0;i<12;i ) piaa[i]= new int(0); 可以看成 long PointerArray[12];//存放指標的陣列 for(int i=0;i<12;i ) PointerArray[i]=(long)new int(0);//配置記憶體,並將其指標放到陣列中 基本上就這樣啦! 至於指標為何可以轉成long,麻煩去問你們老師 |
johnjohn
一般會員 發表:6 回覆:59 積分:13 註冊:2004-04-20 發送簡訊給我 |
scottish你好
既然你知道
1.int *piaa[12];是宣告一個包含12個整數指標的陣列,而不是pointer.
2.你new的對象是piaa[i]
3.delete []pia是去釋放指標pia所指向的一塊block 現在你再想想,當你寫delete []piaa;時,它代表什麼? 它代表你要去釋放指標piaa所指向的一塊block,但是piaa是指標嗎? No. 而你new的對象又是誰? 是piaa[i]
因此你要去delete 的對象當然是piaa[i]囉 >>
|
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |