Подтвердить что ты не робот

Почему неуправляемая структура не может быть членом управляемого класса?

Я знаю, что в С++/CLI нельзя использовать неуправляемые типы при определении управляемого класса:

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

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

Я не понимаю, почему. Unmanaged - это просто набор родных типов - его размер известен, конечно, он (и под ним я подразумеваю блок памяти, который его определяет) будет перемещен с "блоком памяти", который Managed внутри "управляемая куча", и любое смещение, хранящееся в метаданных, останется в силе, нет? Как будто было объявлено целое число или float?

Почему мы не можем смешивать типы?

4b9b3361

Ответ 1

Смешанный тип на самом деле относится к моделям смешанной памяти. Неуправляемые типы идут в кучу, управляемые типы входят в мусорную кучу, поэтому, когда вы внедряете неуправляемый тип в управляемый, для хранения требуется куча памяти, поэтому вы делаете это с указателем. Указатель управляется, значение, на которое оно указывает, не равно.

Мне было любопытно, поэтому я собрал свой google и нашел это.

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

Гай, кажется, знает, о чем он говорит.

Хороший вопрос, хотя...