作者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