[問題] new的陣列拿去return後要怎麼delete?

看板C_and_CPP (C/C++)作者 (你在哪)時間13年前 (2012/10/06 02:37), 編輯推噓8(8017)
留言25則, 11人參與, 最新討論串1/1
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) dev-c++ int* func(int abc[]) { .... .... int m; m=abc[5]*abc[7]; int* kk=new int[m]; .... .... .... return kk; } int main(void) { int h[6]; int* ah; .... .... .... ah=func(h); .... .... .... return 0; } return給main後 執行權就不在func上 main就無從得知kk 也無法delete它 還是kk會在func return後自己消失? } -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.32.242.172 ※ 編輯: hadbeen 來自: 114.32.242.172 (10/06 02:37)

10/06 02:49, , 1F
delete [] ah; ?
10/06 02:49, 1F

10/06 05:55, , 2F
這東西設計要成對。把你的 func 改名叫 make_xxx(),
10/06 05:55, 2F

10/06 05:56, , 3F
然後另外設計一個 free_xxx() 把 kk 丟進去做 delete[]。
10/06 05:56, 3F

10/06 05:56, , 4F
最後在使用文件上說明必須成對使用這組 functions。
10/06 05:56, 4F

10/06 06:04, , 5F
使用Boost或C++11的shared_ptr
10/06 06:04, 5F

10/06 06:04, , 6F
之後pointer會在ref count為零時自動回收
10/06 06:04, 6F

10/06 08:32, , 7F
原po的問題就是leak的原因之一,所以才有 smart_ptr
10/06 08:32, 7F

10/06 08:33, , 8F
為什麼不能直接delete ah ?
10/06 08:33, 8F

10/06 08:39, , 9F
沒空間概念.........................
10/06 08:39, 9F

10/06 09:06, , 10F
func不是把位置傳回來了嗎 所以delete ah =delete kk
10/06 09:06, 10F

10/06 10:05, , 11F
反正main結束會幫你回收
10/06 10:05, 11F

10/06 11:45, , 12F
如果程式是要一直跑得,等os自動回收就會炸掉
10/06 11:45, 12F

10/06 12:58, , 13F
不是應該要留著kk new出來的陣列嗎? 之後那變成是ah的
10/06 12:58, 13F

10/06 12:59, , 14F
ah就不著的時候在delete
10/06 12:59, 14F

10/06 14:49, , 15F
指標地獄真可怕
10/06 14:49, 15F

10/06 15:11, , 16F
指標轉阿轉就頭暈啦
10/06 15:11, 16F

10/06 15:12, , 17F
都用c++了,建議還是用stl的
10/06 15:12, 17F

10/06 15:12, , 18F
基本上我都是用vector
10/06 15:12, 18F

10/06 15:21, , 19F
我實在搞不懂,為什麼喜歡叫函式分配記憶體 很恐怖ㄟ
10/06 15:21, 19F

10/06 15:36, , 20F
因為有可能要把建立物件的知識封裝起來,簡化創立過程
10/06 15:36, 20F

10/06 15:37, , 21F
Factory Pattern可以查一下看看
10/06 15:37, 21F

10/06 15:38, , 22F
有可能函數傳回只是抽象指標,實體是何種子類別則不定
10/06 15:38, 22F

10/06 15:40, , 23F
smart point我印象中只能指向單一個體,不能指向array
10/06 15:40, 23F

10/06 15:41, , 24F
如果只是要配置array,那改用vector就好,比較不會犯錯
10/06 15:41, 24F

10/06 22:10, , 25F
unique_ptr可放array, share_ptr不行
10/06 22:10, 25F
文章代碼(AID): #1GRoZKl_ (C_and_CPP)
文章代碼(AID): #1GRoZKl_ (C_and_CPP)