我已经通过了下面的代码,但是当我调试我发现像析构函数被调用两次的代码。因为它应该被称为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次..你假设参考副本是一个深层克隆..它不是。 –