[問題] 新手第7戒問題 new delete

看板C_and_CPP (C/C++)作者 (拉)時間16年前 (2010/06/02 01:23), 編輯推噓3(305)
留言8則, 5人參與, 最新討論串1/1
小弟想請問一個觀念上的問題,我已經爬過文了,沒有看到關於我想問的問題的討論 有可能是太基本了... 新手第7戒提到有相應的new 就要有相應的delete 狀況一 void func() { int *array=new int[array size]; //do something } int main() { func(); //第一次叫 func(); //第二次叫 return 0; } 狀況二 void func() { int *array=new int[array size]; //do something delete [] array; } int main() { func(); //第一次叫 func(); //第二次叫 return 0; } 第一個問題是想請教第一次叫完func()的時候在狀況一是不是如同狀況二array已經被 delete掉了呢?也就是說呼叫第2次func()的時候是不是記憶體只有1個array而非2個array 呢?我自己測試的結果似乎是這樣,所以delete可以省略? 還是說省略理論上是可以, 但是是一個不好的習慣,所以還是建議寫delete? 希望各位解答,謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 124.8.99.128

06/02 01:46, , 1F
狀況一呼叫一次func 少一條記憶體, 不會幫你delete
06/02 01:46, 1F

06/02 01:47, , 2F
很好奇你是怎麼測試的 ~ " ~
06/02 01:47, 2F

06/02 03:33, , 3F
否, 只有在程式執行結束時才會釋放, 程式中都要自己 delete
06/02 03:33, 3F

06/02 09:16, , 4F
你的問題應該是要思考array是要當func中的區域變數或是共用
06/02 09:16, 4F

06/02 09:59, , 5F
我自己搞錯了 感謝各位回答
06/02 09:59, 5F

06/02 18:22, , 6F
狀況一就是典型的memory leaking 如果func()一直呼叫那
06/02 18:22, 6F

06/02 18:22, , 7F
memory就一直減少 程式就越考越慢
06/02 18:22, 7F

06/02 18:23, , 8F
06/02 18:23, 8F
文章代碼(AID): #1C1K87Ri (C_and_CPP)
文章代碼(AID): #1C1K87Ri (C_and_CPP)