14

我知道在 C++/CLI 中定义托管类时不能使用非托管类型:

public struct Unmanaged
{
    int x;
    int y;
};

public ref class Managed
{
    int one;
    Unmanaged two;  //error C4368
};

我不明白为什么。Unmanaged只是本机类型的集合 - 它的大小是已知的,当然它(我的意思是定义它的内存块)将与Managed“托管堆”内的“内存块”一起移动,并且存储在元数据中的任何偏移量都将保持有效,不是吗?就像声明了整数或浮点数一样?

为什么我们不能混合类型?

4

1 回答 1

16

混合类型实际上是指混合内存模型。非托管类型放在堆上,托管类型放在垃圾收集堆中,所以当你在托管中嵌入非托管类型时,它需要两个堆上的内存,这就是你用指针做这种事情的原因。指针是托管的,它指向的值不是。

我自己很好奇,所以我收集了我的谷歌并找到了这个。

http://blogs.msdn.com/b/branbray/archive/2005/07/20/441099.aspx

盖伊似乎知道他在说什么。

好问题虽然...

于 2012-05-09T20:24:47.737 回答