我已經通過了下面的代碼,但是當我調試我發現像析構函數被調用兩次的代碼。因爲它應該被稱爲4次r1,r2,r3,r4。我錯過了一些東西。請幫助我,我是新來的c#。 這裏在什麼時候結構對象被破壞。析構函數沒有正確調用
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");
}
}
這是C#中的終結器,它與C++析構函數不一樣。您應該閱讀Finalization和垃圾收集器。此外,它不應該被解僱4次..你假設參考副本是一個深層克隆..它不是。 –