Stan Lippman говорил об этом здесь . Я думал, что это было интересно.
Сводка : Stroustrup первоначально использовал class
для определения типов в шаблонах, чтобы не представлять новое ключевое слово. Некоторые в комитете волновались что эта перегрузка ключевого слова, ведомого к беспорядку. Позже, комитет представил новое ключевое слово typename
для разрешения синтаксической неоднозначности и решил позволить ей также использоваться, чтобы определить, что шаблонные типы для сокращения беспорядка, но для обратной совместимости, class
сохранили ее перегруженное значение.
Строка ^
- указатель на управляемую кучу, также известную как дескриптор . Указатели и дескрипторы не взаимозаменяемы.
Вызов new
выделяет объект в неуправляемой куче и возвращает указатель. С другой стороны, вызов gcnew
выделит объект в управляемой куче и вернет дескриптор.
Строка username = "XYZ"
- это просто сахар компилятора. Это эквивалентно
username = gcnew String(L"XYZ");
Это ссылка, а не указатель на строку со сборщиком мусора.
Она будет выделяться и освобождаться автоматически, когда на нее больше не ссылаются.
Если учесть, что ^
похож на shared_ptr
вы будете недалеко от истины.