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 に答える