none
有關Dictionary<key, value>裡的value是個class RRS feed

  • 問題

  • 我想請問一下

    如我現在有個Dictionary<int, myClass> A;

    今天我作了以下的步驟

    myClass my1, my2

    A[0] = (my1 = new myClass());

    A[0] = (my2 = new myClass());

    請問上面第二行作完後my1系統會清理掉嗎?

    還是說我最好自己處理掉? 怎麼處理比較恰當呢?

    謝謝哦~~

    2010年7月15日 上午 08:20

解答

  • 程式離開該區塊後,遇到 GC 的週期時,若 my1 的 ref count 為 0時 (即沒有其他地方引用該 my1),就會被回收。

    程式可以 compile,但實在不具可讀性。

    • 已標示為解答 pinkspider 2010年7月16日 上午 02:23
    2010年7月15日 上午 09:01
  • 對,會清掉。所以保持原狀即可

    • 已標示為解答 pinkspider 2010年7月16日 上午 02:23
    2010年7月15日 上午 09:51

所有回覆

  • 加上 my1 = null;

     

    好奇問一下,你這樣寫編譯會過嗎?

    2010年7月15日 上午 08:39
  • 程式離開該區塊後,遇到 GC 的週期時,若 my1 的 ref count 為 0時 (即沒有其他地方引用該 my1),就會被回收。

    程式可以 compile,但實在不具可讀性。

    • 已標示為解答 pinkspider 2010年7月16日 上午 02:23
    2010年7月15日 上午 09:01
  • 會過壓~  不過我上面那樣寫只是簡便地寫.. 我自己的程式沒那樣寫啦..

     我的問題寫清楚一點好了

    public class A

    {

    Dictionary<int, myClass> myDictionary;

    .................

    public void Add(int id)

    {

    myClass my = new myClass();

    myDictionary[id] = my;
    }

    static void main()

    {

    A a = new A();

    a.Add(1);

    a.Add(1);

    }

    }

    上面寫的沒很順, 不過應該能了解我想問的.

    第一次Add時, 我的myDictionary會有一對資料 (1, my(1))

    第二次又Add時,因為key也是1, 所以會只是把原來那對資料的value改成指向my(2)

    此時my(1)應該就是處在沒人使用跟引用到的狀況

    不知道這樣my(1)是不是GC就會清理掉呢?

    還是我最好在Add裡加下面幾句?

    if(myDictionary.ContainKey(id)

    {

    myDictionary[id] = null;

    myDictionary[id] = my;

    }

    2010年7月15日 上午 09:13
  • 對,會清掉。所以保持原狀即可

    • 已標示為解答 pinkspider 2010年7月16日 上午 02:23
    2010年7月15日 上午 09:51