→ 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)
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