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