看板 EE_DSnP 關於我們 聯絡資訊
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
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)