class A
{
public int m_a;
}
void fun(ref int a)
{
...
}
fun(ref new A().m_a);
楽しみながら、「ref int a」は、楽しみから戻る前にオブジェクト(new A())が再利用されないようにするにはどうすればよいですか?
<example 0>
using System;
class A
{
public int m_a;
~A()
{
Console.WriteLine("~A()");
}
}
class Program
{
static void fun(ref int a)
{
Console.WriteLine("Begin<<<<<<<<<<<<<<");
a++;
GC.Collect();
GC.WaitForPendingFinalizers();
Console.WriteLine("End>>>>>>>>>>>>>>>>>");
}
static void Main(string[] args)
{
fun(ref new A().m_a);
Console.WriteLine("Over");
}
}
output:
Begin<<<<<<<<<<<<<<
~A()
End>>>>>>>>>>>>>>>>>
Over
<example 1>
using System;
class A
{
public int m_a;
~A()
{
Console.WriteLine("~A()");
}
}
class Program
{
static void fun(ref int a)
{
Console.WriteLine("Begin<<<<<<<<<<<<<<");
a++;
GC.Collect();
GC.WaitForPendingFinalizers();
//add a code
a++;
Console.WriteLine("End>>>>>>>>>>>>>>>>>");
}
static void Main(string[] args)
{
fun(ref new A().m_a);
Console.WriteLine("Over");
}
}
output:
Begin<<<<<<<<<<<<<<
End>>>>>>>>>>>>>>>>>
Over
~A()
VSのリリースモードでビルドしてください。ASMコードを表示すると、2行だけが追加されます。
a++;
0000002f mov eax,dword ptr [ebp-4]
00000032 inc dword ptr [eax]
2つの例の間の他の部分は同じです。GCは、変数aがマシンコードで役に立たなくなったことをどのように確認しますか?