作者ric2k1 (Ric)
看板EE_DSnP
标题Re: [讨论] BddNode and BddNodeInt
时间Tue Jan 12 01:20:54 2010
: 看完宝典後,对refCount还是有一点小小的疑问:
: 就是call BddNode destructor时,该怎麽处理refCount
:
: 如果refCount > 1
: 那就很单纯的 --refCount
:
: 不过问题就在refCount == 1 及 refCount == 0 时
: 我记得上课时有讲到在BddNode copy constructor被呼叫时会有case 0 ??
: 这份影片还没上传所以无法查证ˊˋ
:
: refCount == 1 直接 delete BddNodeInt* 这样行吗?
: 会不会有例外情况@ @"
如果没有任何东西 refer 到 BddNodeInt*, 那是没有关系,可以在 ~BddNode() 里头
直接 delete getBddNodeInt(), 然後 getBddNodeInt() 自己会 recursively
呼叫 left / right BddNode 的 destructor, and so on...
但是就像 herbert570 所说的,由於 Hash/Cache 里头存的是 size_t,
本身没有增加 BddNodeInt* 的 refCount, 所以如果你在别的地方将 BddNodeInt*
delete 掉, 那 Hash/Cache 里头的 data 就会 out-dated 而发生问题
:
: 宝典上面是说call destructor 时直接 --refCount就行
: 可是好像没有那麽单纯..ˊˋ
:
:
: 另外是BddNode的其中一个constructor
: // Need to check if n._nodeV !=0
: BddNode(size_t v): _nodeV(v)
: {
: //TODO
: }
: 请问这是不是应该将注解改成check v != 0 或getBddNodeInt() != 0啊?
: 写到这边挺疑惑的说orz|||
啊啊, 对! 这里的 n 是指 getBddNodeInt() 啦!
:
:
: --
:
※ 发信站: 批踢踢实业坊(ptt.cc)
: ◆ From: 114.45.170.8
: 推 mymaydayya:既然count=0 还有可能被BddNode的destruct呼叫吗? 01/11 22:03
: → mymaydayya:count=0应该就没有BddNode指到他了吧 01/11 22:04
: → dryman:有道理XD count应该不会为零 01/11 22:11
: → dryman:那麽if (--count == 0 ) 时一定可以delete BddNodeInt吗? 01/11 22:13
: → dryman:想起来了,destructor应该没问题:D 01/11 22:29
: 推 herbert570:不一定喔! 01/11 22:42
: → herbert570:注意 bddArr 和 bddMap 存放的都只是 size_t! 01/11 22:42
: → herbert570:所以如果直接把他们 delete 掉,有可能出错 01/11 22:42
: → dryman:嗯嗯,谢谢楼上:D 01/11 23:13
: default constructor:
: BddNode() : _nodeV(0) {}
: 在BddMgr里面有很多地方会叫到这个
: 所以destructor, "=" 要处理 _nodeV本来为零的情况
嗯, 否则用 NULL pointer 去 access refCount 就挂了...
:
: ※ 编辑: dryman 来自: 114.45.170.8 (01/11 23:29)
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 61.224.41.206