Создание объекта публичного класса ref с использованием new и gcnew - PullRequest
0 голосов
/ 28 июня 2018

У меня есть класс, объявленный в MyRefClass.h

public ref class MyRefClass{
....
....
};

В чем разница между тем, где / как три объекта распределяются и управляются?

//  This is allocated in **C++/CLI**.
MyRefClass ^mrc = gcnew MyRefClass();
MyRefClass *mrc2 = new MyRefClass;

// If allocated in **C#**
MyRefClass mrc3 = new MyRefClass()

Простите, если это слишком глупый вопрос. Я новичок в C # и C ++ / CLI.

1 Ответ

0 голосов
/ 28 июня 2018

Вторая строка с новым неверна и не будет компилироваться, даже если синтаксис неправильный, если это будет неуправляемый класс. Чтобы получить результат от нового оператора, вы должны удалить указатель с указателя.

Короче говоря:

Управляемые объекты (класс ref) должны быть выделены с помощью gcnew. Управляемые объекты находятся в управляемой куче .NET и освобождаются сборщиком мусора. Такие классы / объекты могут быть легко разделены между всеми языками в мире .NET.

Неуправляемые объекты (класс) должны быть выделены с новыми. Они должны быть освобождены с помощью delete. Такие объекты живут в обычном процессе кучи.

...