0

I have been through the below code but while i am debugging the code i found like the destructor is being called for twice . Where as it should get called 4 times for r1,r2,r3,r4 .Am i missing something .Please help me , i am new to c# . Here at what time the structure object get destroyed .

using System;
struct Struct1
{
    public int Value;

}
class Class1
{
    public int Value = 0;
    ~Class1()
    {
        Console.WriteLine("Calling destructor");
    }
}
class Test
{
    static void Main()
    {
        Struct1 v1 = new Struct1();
        Struct1 v2 = v1;
        v2.Value = 123;
        Class1 r1 = new Class1();
        Class1 r2 = r1;
        r2.Value = 123;
        Console.WriteLine("Values: {0}, {1}", v1.Value, v2.Value);
        Console.WriteLine("Refs: {0}, {1}", r1.Value, r2.Value);
        vivek();
        viku();
        Console.ReadKey();
    }
    static void viku()
    {
        Struct1 v1 = new Struct1();
        Struct1 v2 = v1;
        v2.Value = 123;
        Console.WriteLine("Values: {0}, {1}", v1.Value, v2.Value);
    }

    static void vivek()
    {
        Class1 r3 = new Class1();
        Class1 r4 = r3;
        r4.Value = 15;
       // Console.WriteLine("Values: {0}, {1}", v1.Value, v2.Value);
        Console.WriteLine("Refs: {0}, {1}", r3.Value, r4.Value);
        Console.Write("Calling vivek");
    }

} 
4

2 に答える 2

3
    Class1 r1 = new Class1();
    Class1 r2 = r1;

    Class1 r3 = new Class1();
    Class1 r4 = r3;

それぞれ 2 つの参照を持つ 2 つの個別のオブジェクトを作成します。参照が 4 つあるにもかかわらず、ファイナライズするオブジェクトは 2 つしかありません。したがって、~Class() は 2 回だけ呼び出されます (オブジェクトごとに 1 回)。

いくつかの類似の C++ コードは次のとおりです。

    shared_ptr<Class1> r1(new Class1());
    shared_ptr<Class1> r2 = r1;

    shared_ptr<Class1> r3(new Class1());
    shared_ptr<Class1> r4 = r3;

これにより、Class1 デストラクタが 2 回だけ呼び出されます。

于 2013-10-13T12:40:17.430 に答える