__nogc
Примечание
Этот раздел относится только к управляемым расширениям для C++ версии 1.Приведенный здесь синтаксис должен использоваться только для обслуживания кода версия 1.В новом синтаксисе нет необходимости явно отмечать тип как неуправляемый.
Явное объявление неуправляемого типа.
__nogc class-specifier
__nogc struct-specifier
__nogc interface-specifier
__nogc array-specifier
__nogc pointer-specifier
__nogc new
Заметки
Ключевое слово __nogc служит для явного указания того, что объект выделяется в стандартной куче C++. Это ключевое слово можно опустить. Если ключевое слово __gc или __nogc перед объявлением класса не указано, по умолчанию используется __nogc.
Объекты этого типа похожи на стандартные объекты C++ тем, что они выделяются из стандартной кучи C++ и не подвержены ограничениям управляемого объекта.
Ключевое слово __nogc используется также при явном выделении объекта типа __value в стандартной куче C++:
// keyword__nogc.cpp
// compile with: /clr:oldSyntax
#using <mscorlib.dll>
__value struct V {
int i;
};
int main() {
V * v = __nogc new V;
v->i = 10;
delete v;
}
Примечание
Ключевое слово __nogc можно также применять для типов массива и указателя.
Указатель gc не может быть членом класса __nogc. Инструкции по внедрению типа значения в классе __nogc см. в разделе __value.
Пример
В следующем примере объявляется неуправляемый класс (X) и создается и изменяется экземпляр объекта.
// keyword__nogc_2.cpp
// compile with: /clr:oldSyntax
#using <mscorlib.dll>
using namespace System;
__nogc class X {
public:
int i;
};
int main() {
X* x; // declares an unmanaged pointer of type X
x = new X(); // creates unmanaged object of type X on the C++ heap
Console::WriteLine(x->i);
x->i = 4; // modifies unmanaged object
Console::WriteLine(x->i);
delete x; // call C++ delete operator to clean up resource
}