推 davidlue:感謝老師m(_ _)m 終於懂了~||| 01/11 18:44
※ 引述《davidlue (諮詢暨策略主任)》之銘言:
: 想請大家幫忙一下orz
: 我的執行結果,BDD和reference program是一樣的
: 但是reference count不一樣
: 例如原本的test.cpp
: 執行結果是
: [3](+) 0x960b8b8 (1)
: [1](+) 0x960a870 (5)
: [0](+) 0x960a860 (11)
: [0](-) 0x960a860 (11) (*)
: [2](+) 0x960a8b0 (1)
: [1](+) 0x960a870 (5) (*)
: [0](-) 0x960a860 (11) (*)
: ==> Total #BddNodes : 4
: [3](+) 0x960b8b8 (2)
: [1](+) 0x960a870 (5)
: [0](+) 0x960a860 (12)
: [0](-) 0x960a860 (12) (*)
: [2](+) 0x960a8b0 (1)
: [1](+) 0x960a870 (5) (*)
: [0](-) 0x960a860 (12) (*)
: ==> Total #BddNodes : 4
: (reference program是 1 4 11 11 1 4 11和 1 3 9 9 1 3 9)
: 尤其是第二個,node[3] 的reference count竟然是2真的很奇怪..|||
: 但是BDD一樣的話應該ite是沒有錯的呀....
: 這樣問題是出在 = operator嗎orz
第二個 "[3](+) 0x960b8b8 (2)" reference count 會等於2的原因, 是因為多了
"e = ...." 這個 assignment, 所以 "0x960b8b8" 這個 BddNodeInt* 就多了一個
BddNode 指到他了.
所以我猜你應該是 "= operator" 忘了加 reference count 了吧?
可以試試看多加這幾行到你的程式---
BddNode f = e;
cout << f << endl;
BddNode g = f;
cout << g << endl;
....
或者 ---
cout << a << endl;
BddNode aa = a;
cout << aa << endl;
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.112.21.240