Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Visual C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.11.2010, 00:12   #1
I.C.E
Пользователь
 
Аватар для I.C.E
 
Регистрация: 05.09.2009
Сообщений: 17
По умолчанию Для чего используют операторы ^ и gcnew?

Совсем недавно я начал изучать С++, когда попытался создать Windows-приложение в Visual Studio, большая часть кода не вызвала у меня вопросов, но все же я так и не понял для чего используется оператор ^, и чем отличается gcnew от new. Подскажите пожалуйста, как можно подробнее, если есть возможность.
I.C.E вне форума Ответить с цитированием
Старый 23.11.2010, 01:10   #2
Гром
Старожил
 
Аватар для Гром
 
Регистрация: 21.03.2009
Сообщений: 2,193
По умолчанию

Если вы хотите изучать нормальный C++ (или более политкорректно - "чистый C++"), то вам этого знать не обязательно. Операторы ^ и gcnew - это местные аналоги * и new из обычного C++, имеющие место в managed C++, он же C++ CLI. Последний представляет собой дикое сочетание вкуса и цвета нормального C++ и C#. Настоятельно не рекомендую копаться в этом довольно плохо сделанном гибриде, и заниматься либо C++, либо C#.
Подозреваю, что в Visual Studio вы при создании проекта выбираете тип проекта Visual C++ -> CLR. Консольное приложение на обычном C++ это Visual C++ -> Win32 -> Консольное приложение Win32.
Простые и красивые программы - коды программ + учебник C++
Создание игры - взгляд изнутри - сайт проекта
Тема на форуме, посвященная ему же
Гром вне форума Ответить с цитированием
Старый 23.11.2010, 11:49   #3
I.C.E
Пользователь
 
Аватар для I.C.E
 
Регистрация: 05.09.2009
Сообщений: 17
По умолчанию

Да, вы правы, я именно так и делал. До этого я программировал на С# и только недавно начал изучать С++.
I.C.E вне форума Ответить с цитированием
Старый 12.11.2014, 23:49   #4
kovalexius
 
Регистрация: 12.11.2014
Сообщений: 4
По умолчанию

Скорее всего ^ выполнена в виде макроса, в котором прописано инстанциирование объекта шаблонного класса-обертки над указателем на ресурс, принимающего тип в качестве параметра, тогда такая штука скажем
String^ ptr = gcnew String("abc");

превратится в

template<typename T> // в качестве T будет String
class GC
{
T* value; // суть в том что наш ресурс расположен по этому указателю
GC()
{
// хитрая реализация, вызовы методов GC
}
GC( const GC& other )
{
// хитрая реализация
}
GC& operator = ( const GC& other )
{
// хитрая реализация
}
~GC( )
{
// хитрая реализация
}
GC* operator -> ()
{ return this; }
};
то есть в обертку над указателем на ресурс того типа (в данном случае String) который создаем.
kovalexius вне форума Ответить с цитированием
Старый 13.11.2014, 12:13   #5
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,330
По умолчанию

Цитата:
Сообщение от kovalexius Посмотреть сообщение
Скорее всего ^ выполнена в виде макроса
Осталось:
а) Не писать по ночам дабы не писать в темы 4-5 летней давности
б) Научить компилятор понимать выражение #define ^ ибо он этого не умеет.
waleri вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Используют ли структуры(struct) в классах ? veter_s_morya Общие вопросы C/C++ 3 08.08.2010 20:18
Для чего используют typedef prikolist Общие вопросы C/C++ 17 16.04.2009 15:36
Для чего вы программируете? Elefanter Свободное общение 14 17.02.2008 21:54