作者ric2k1 (Ric)
看板EE_DSnP
標題Re: [問題] double delete
時間Sun Dec 16 23:24:29 2007
※ 引述《lionel20002 (~小遙~)》之銘言:
: class裡面有pointer的datamember時
: 如果寫destructor
: 想要將new出來的空間delete掉
: 如果之前做過assign的話
: pointer存的位置也同樣assign了
: 這樣很容易double delete
: 要怎麼避免?
: 自己寫operator overloading和copy constructor似乎可行
: 但還是覺得麻煩...
multiple pointer variables refer to the same memory location 而造成
double deletion error, 實在是不容易 fix...
因為如果過度閃躲而少去 delete, 通常反而會造成 memory leak!
一般只能建議 (其中一兩種):
1. 養成良好的 coding style, 什麼時候要 delete pointer 有個固定的原則.
2. 自行管 memory (e.g. overload new and delete), 一次跟系統要一大塊記憶體,
然後自行分配給 new operator.
最後在一次還掉, 保證不會有 memory leak 與 double free error.
3. 對每個 pointer variable 加 reference count,
知道有多少人目前在用這個 pointer.
當然 pointer variable 是沒有空間再加 reference count, 因此一般會:
(i) use a map (pointer, int) or
(ii) 在 pointed class 中加入 "size_t _refCount",
然後再包個 wrapper class 來管理 pointer object 的 _refCount
與 = operator
以上, 2 & 3 這門課應該也教不到, 有興趣的可以來修我的 DSnP...
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 59.121.134.219
1F:推 eeturtur:歡迎下學期選修老師的DSnP 你會超愛ptr 欲購從速以免向隅 12/16 23:28
2F:→ ric2k1:大一下適合嗎...? 12/16 23:37
3F:推 ilway25:dspn是大一下阿? 12/16 23:38
4F:→ ilway25:囧看來不是 12/16 23:38
5F:→ ric2k1:補充一下, 關於 (1), 通常可以加一個 manager class, 12/17 00:16
6F:→ ric2k1:將所有 allocated pointer variables 串在一起, 12/17 00:17
7F:→ ric2k1:統一由他來管理 pointer allocation and deletion 的問題 12/17 00:18
8F:推 lionel20002:頗為複雜........ 12/17 00:20
9F:推 eeturtur:大一下應該沒有3學分的空間可以塞這門課^^|| 12/17 00:59
10F:推 lionel20002:還蠻想修的說... 12/17 23:24