全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1165
推到 Plurk!
推到 Facebook!

C++ 的 new 與 delete 的疑惑??

尚未結案
scottish
一般會員


發表:2
回覆:1
積分:0
註冊:2004-04-06

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-05-08 15:30:52 IP:218.168.xxx.xxx 未訂閱
當我們在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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-05-09 04:17:22 IP:211.76.xxx.xxx 未訂閱
引言: 但是,當我們在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
piaa指標本身的實體是在Stack中,不需要delete 但是piaa[i]指向的位置是在heap中,需要delete 後者才是正確的
jcjroc
高階會員


發表:21
回覆:279
積分:115
註冊:2002-09-18

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-05-09 15:01:44 IP:61.219.xxx.xxx 未訂閱
引言: 當我們在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

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-05-09 22:09:48 IP:203.70.xxx.xxx 未訂閱
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]囉 >>
系統時間:2024-09-30 3:43:57
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!