2016-01-15 6 views
0

я прочитал, что, напримерC++ только используя^вместо *?

MyClass<T>^mc = new MyClass<T>(); 

дает ручку тс.

  1. Могу ли я использовать^mc так же, как использовать * mc?

Я также читал, что использование^тс будет создавать объект в консоли куче, которая автоматически очищается, так что я не должен использовать delete mc тогда.

Разве это не аргумент, связанный с использованием^-handles?

+4

Это расширение C++ - CLI. –

ответ

2

^ указатели используются только в версии Microsoft Common Language Runtime для языка. Если вы их используете, вы блокируете свой проект, чтобы использовать только компилятор Microsoft. Если вы ищете переносимость, вы должны использовать традиционные указатели, которые необходимо удалить вручную или использовать новые возможности C++ 11.

1

Это расширение, но вы можете получить что-то подобное в стандартном C++ с использованием:

auto mc = std::make_unique<MyClass<T>>(); 

И да, это хороший повод, чтобы использовать std::unique_ptr и/или std::shared_ptr всякий раз, когда вы можете.

+0

Ваше последнее заявление может быть введено в заблуждение, рекомендуя использовать указатели, где этого значения будет достаточно. 'shared_ptr's, когда они злоупотребляют, имеют большой потенциал, чтобы запутать код в беспорядок путаницы с нечеткой властью. –

+0

thx alot, ваш ответ и один из колладиента вместе были бы идеальным ответом. ^^ – Sneedlewoods

0

^ - управляемый указатель. Это CLI-эквивалент умного указателя.

Я также читал, что использование ^mc создаст объект в куче Cli, которая автоматически очищается, так что я не должен использовать delete mc тогда.

Да, это правда. Время выполнения CLI имеет сборщик мусора. Но CLI - это особая вещь для Windows, поэтому она не будет работать в других средах.

+1

. .NET CoreCLR теперь открыт с открытым исходным кодом (с обещанием портов Linux и Mac, которые я еще не проверял, если они еще прибыли), и в течение долгого времени Mono была альтернативой Linux. – coladict

+0

@coladict Я забыл о Моно, я отредактирую свой ответ. –

+0

Кроме того, вы не можете написать '^ mc', это синтаксическая ошибка, вы не можете разыменовать дескриптор. Вы можете использовать на нем '->'. –

 Смежные вопросы

  • Нет связанных вопросов^_^