Architecture Net


         

Ограничения на использование управляемых типов в C++ - часть 2


5. Неуправляемый класс, в котором не указан явно базовый класс, является независимым корневым классом. В то же время, управляемый класс, в котором не указан явно ни один класс в качестве базового, является производным от корневого класса System: :Object (Система::Объект).

6. К объекту, участвующему в сборке мусора (т.е. к экземпляру управляемого класса, который использует ключевое слово _дс (сборщик мусора), а не _value (значение) или _поде), можно получить доступ только посредством указателя (или ссылки) на объект в управляемой динамически распределяемой области памяти. Это является отличием от неуправляемых типов, которые могут содержаться либо непосредственно в переменной типа значения, либо к ним можно получить доступ посредством указателя на неуправляемую динамически распределяемую область памяти.

Перечисленные правила использования управляемых типов в C++ подытожены в предлагаемом примере программы. Комментарии помогут вам понять все эти сложные правила. Если вы откроете проект ManagedAndUnmanagedTypes и попробуете раскомментировать каждый из тех операторов (лучше по одному за один проход), который вызывает ошибку компилятора, вы лучше поймете каждое из правил. Всего лишь щелкните на интересующей вас ошибке в окне Task List (Список задач), а затем нажмите F1 для получения документации, в которой разъясняется суть ошибки. И, конечно, двойной щелчок на ошибке в окне Task List (Список задач) приведет вас к соответствующему оператору в окне редактора исходного кода программы.

//ManagedAndUnmanagedTypes.срр

fusing <mscorlib.dll>

using namespace System;

// использование пространства имен Система;

#pragma warning(disable : 4101)

// *pragma предупреждение (отключите: 4101)

// игнорировать отсутствие ссылок на локальные переменные (unref

local)

_gc class MemberManagedClass {};

// используется как элемент данных

// класс сборщика мусора MemberManagedClass {};

_nogc class MemberUnmanagedClass {};

// класс MemberUnmanagedClass используется как элемент данных




Содержание  Назад  Вперед