【发布时间】:2014-12-04 23:28:01
【问题描述】:
假设我们有结构
struct MyStruct
{
public string a;
}
当我们将它分配给新变量时,字符串会发生什么?因此,例如,我们希望在堆栈中复制结构时应该共享字符串。我们正在使用此代码对其进行测试,但它返回不同的指针:
var a = new MyStruct();
a.a = "test";
var b = a;
IntPtr pA = Marshal.StringToCoTaskMemAnsi(a.a);
IntPtr pB = Marshal.StringToCoTaskMemAnsi(b.a);
Console.WriteLine("Pointer of a : {0}", (int)pA);
Console.WriteLine("Pointer of b : {0}", (int)pB);
问题是,当结构体被复制到堆栈中并在其中包含字符串时,它是共享字符串还是重新创建字符串?
[更新]
我们也试过这段代码,它也返回不同的指针:
char charA2 = a.a[0];
char charB2 = b.a[0];
unsafe
{
var pointerA2 = &charA2;
var pointerB2 = &charB2;
Console.WriteLine("POinter of a : {0}", (int)pointerA2);
Console.WriteLine("Pointer of b : {0}", (int)pointerB2);
}
【问题讨论】: