Почему неуправляемая структура не может быть членом управляемого класса?
Я знаю, что в С++/CLI нельзя использовать неуправляемые типы при определении управляемого класса:
public struct Unmanaged
{
int x;
int y;
};
public ref class Managed
{
int one;
Unmanaged two; //error C4368
};
Я не понимаю, почему. Unmanaged
- это просто набор родных типов - его размер известен, конечно, он (и под ним я подразумеваю блок памяти, который его определяет) будет перемещен с "блоком памяти", который Managed
внутри "управляемая куча", и любое смещение, хранящееся в метаданных, останется в силе, нет? Как будто было объявлено целое число или float?
Почему мы не можем смешивать типы?
Ответы
Ответ 1
Смешанный тип на самом деле относится к моделям смешанной памяти. Неуправляемые типы идут в кучу, управляемые типы входят в мусорную кучу, поэтому, когда вы внедряете неуправляемый тип в управляемый, для хранения требуется куча памяти, поэтому вы делаете это с указателем. Указатель управляется, значение, на которое оно указывает, не равно.
Мне было любопытно, поэтому я собрал свой google и нашел это.
http://blogs.msdn.com/b/branbray/archive/2005/07/20/441099.aspx
Гай, кажется, знает, о чем он говорит.
Хороший вопрос, хотя...