我知道在C ++ / CLI中,在定义托管类时不能使用非托管类型:
public struct Unmanaged
{
int x;
int y;
};
public ref class Managed
{
int one;
Unmanaged two; //error C4368
};
我不明白为什么。 Unmanaged
只是一个本机类型的集合 - 它的大小是已知的,当然它(我的意思是定义它的内存块)将随着'{1的'内存块'移动在'托管堆'中,并且元数据中存储的任何偏移都将保持有效,不是吗?就像声明了整数或浮点数一样?
为什么 我们不能混用类型吗?
答案 0 :(得分:16)
混合型实际上是指混合型内存模型。非托管类型进入堆,托管类型进入垃圾收集堆,因此当您在托管中嵌入非托管类型时,它将需要两个堆上的内存,这就是您使用指针执行此类操作的原因。指针是受管理的,它指向的值不是。
我自己很好奇,所以我收集了谷歌,发现了这一点。
http://blogs.msdn.com/b/branbray/archive/2005/07/20/441099.aspx
盖伊似乎知道他在说什么。
虽然好问题......