Что такое gcnew? - PullRequest
       23

Что такое gcnew?

50 голосов
/ 14 октября 2008

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

Hashtable^ tempHash = gcnew Hashtable(iterators_);

IDictionaryEnumerator^ enumerator = tempHash->GetEnumerator();

Что такое gcnew и насколько важно использовать это вместо простого new? (Я также озадачен каретой; я спросил об этом здесь .)

Ответы [ 3 ]

67 голосов
/ 14 октября 2008

gcnew для справочных объектов .NET; объекты, созданные с помощью gcnew, автоматически собираются мусором; важно использовать gcnew с типами CLR

37 голосов
/ 14 октября 2008

gcnew - это оператор, такой же, как оператор new, за исключением того, что вам не нужно удалять что-либо, созданное с его помощью. Это г мусор с выбрано. Вы используете gcnew для создания управляемых типов .Net, а новые - для создания неуправляемых типов.

1 голос
/ 26 апреля 2016

Символ каретки '^' действует так же, как '*' в C / C ++ при объявлении типа;

// pointer to new std::string object -> memory is not garbage-collected
std::string* strPtr = new std::string;

// pointer to System::String object -> memory is garbage-collected
System::String^ manStr = gcnew System::String;

Я использую термин «указатель», когда описание управляемого объекта как управляемого объекта можно сравнить с «nullptr» так же, как указатель в C / C ++. Ссылку в C / C ++ нельзя сравнивать с 'nullptr', так как это адрес существующего объекта.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...