作者dryman (dryman)
看板EE_DSnP
标题[问题] bddxxxcmd
时间Tue Jan 19 10:02:16 2010
testBdd中可以正确执行
结果在执行./bdd中发现bandcmd等会错误
看了一下程式码发现
BAndCmd::exec(...)
{
...
BddNode ret = BddNode::_one;
...
cout << ret << endl; // 检查-> 执行正确
bddMgr -> forceAddBddNode(options[0], ret()); //加到_bddMap(string, size_t)
return CMD_EXEC_DONE;
}
然後ret就被呼叫destructor了(--refcount == 0)
连带的他原本指向的bddNodeInt也被delete......orz||||||
我原本设计是没人指到这个bddNodeInt就要delete它
不过看来我得让bddNodeInt留着(即使refcount == 0)
可是这样很有可能造成多个bddNodeInt变成无人问津的垃圾
因为本来就会有很多local variable 的 BddNode...
不delete不行啊
请问如何在不更改架构的情况下来解决这个问题?
如果_bddMap等里面存的是BddNode而非size_t就好了ˊˋ
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 220.136.191.184
1F:→ dryman:更改_bddMap, _bddArr里的程式码好了..增加refcount.. 01/19 10:30
唔,现在我想到的解决方法有两种,一种就是如推文,修改addBddNode等function
另一种则是改destructor
只是这样每次desturct都要去查_bddMap, _bddArr
感觉很不经济..(虽然是O(log(n))
_bddArr除非做过sort不然会是O(n)
不如在addBddNode时搞定refcount(可是没有TODO耶,可以自己refactor code吗?)
※ 编辑: dryman 来自: 220.136.191.184 (01/19 10:38)