Re: [問題] 沒new導致heap
事實上我也是初學者,很多觀念不扎實
希望有人可以出來討論或指點錯誤
 ̄ ̄  ̄ ̄ ̄ ̄
※ 引述《LinRungChuan (吉他手)》之銘言:
: 寫了class若有需要物件,我習慣都會用new
: 我一直以為用new或沒用 差別在於 配了記憶體之後 物件call method
: 物件->method 及 物件.method 使用上的差別而已
: 但我在迴圈內要new物件 兩種寫法有為何會有差別
: ex.
: class A{
: A(int,int);
: functionA(int);
: ~A();
: }
^^ 少了 ;
: void main(){
: int ba=1, la=2, bala=3;
: A *A_Obj;
: for(int i=0 ; i<10 ; i++)
: {
: A_Obj = new A(ba,la);
: A_Obj->functionA(bala);
: }
: }
: 以上寫法可以正常執行
雖然可以執行,有new 但沒有delete
長久下來一定有 memory leak
: 但如果沒使用new, main裡面改成
: void main(){
: int ba=1, la=2, bala=3;
: for(int i=0 ; i<10 ; i++)
: {
: A A_Obj(ba,la);
: A_Obj.functionA(bala);
: }
: }
: 迴圈跑到第2圈 就會有heap 的訊息出現
: 我觀念可能有錯,一直以為兩種寫法都可以,想知道為何不用new的
: 這狀況就不能跑,執行環境是VC++2008
: 感謝
這個很奇怪,這段code我在Visual studio 2008可以執行
不知道我的解讀有沒有錯誤
A A_Obj(ba,la) 是宣告一個A類別的物件,叫做A_Obj
(ba,la)是自己提供的建構子而不用預設的建構子(??)
那這段code沒有new,是不是就不用delete?
迴圈做10次就重複宣告A_Obj?
: =======================補充 分隔線=============================
: 如果放delete在迴圈內
: void main(){
: int ba=1, la=2, bala=3;
: A *A_Obj;
: for(int i=0 ; i<10 ; i++)
: {
: A_Obj = new A(ba,la);
: A_Obj->functionA(bala);
: delete A_Obj;
: }
: }
這段code我同樣可以正常執行
*A_Obj 是一個指標
A_Obj = new A(ba,la) 是提供建構
delete 把 *A_Obj所指向的內容刪除
在第二次迴圈又再度 assign A_Obj的內容
如果沒有將 A_Obj 指向 NULL 應該會出問題才是
我執行卻正常結束= =||
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.116.86.10
※ 編輯: eplis 來自: 140.116.86.10 (03/23 23:25)
→
03/23 23:28, , 1F
03/23 23:28, 1F
→
03/23 23:29, , 2F
03/23 23:29, 2F
→
03/23 23:29, , 3F
03/23 23:29, 3F
→
03/23 23:29, , 4F
03/23 23:29, 4F
→
03/23 23:31, , 5F
03/23 23:31, 5F
→
03/23 23:31, , 6F
03/23 23:31, 6F
推
03/23 23:34, , 7F
03/23 23:34, 7F
推
03/24 05:27, , 8F
03/24 05:27, 8F
→
03/24 05:27, , 9F
03/24 05:27, 9F
→
03/24 05:29, , 10F
03/24 05:29, 10F
→
03/24 05:31, , 11F
03/24 05:31, 11F
→
03/24 05:33, , 12F
03/24 05:33, 12F
→
03/24 05:34, , 13F
03/24 05:34, 13F
→
03/24 05:36, , 14F
03/24 05:36, 14F
推
03/24 09:21, , 15F
03/24 09:21, 15F
討論串 (同標題文章)