В общем, для C # и, в частности, для Unity, я бы посоветовал против этого ... но, если вы действительно этого хотели или имели веские причины, вы могли бы.
В C # вам необходимо ознакомиться с тем, что называется небезопасным кодом . Испугался еще?
В Unity вам нужно будет включить небезопасный режим компиляции, чтобы вы не смогли использовать веб-плеер, если вы запланировали это. Вы можете прочитать больше здесь или здесь .
Таким образом, в основном C # был разработан с сборщиком мусора, как и многие языки сценариев. Общая идея состоит в том, чтобы попытаться абстрагировать понятие управления памятью, чтобы упростить разработку. Вы все равно можете получить утечку ресурсов, если не обнуляете свои объекты. Я, честно говоря, не большой сторонник GC и предпочел бы методы RAII , но это мир, в котором мы живем.
Однако большинство разработчиков на C ++ также согласны с тем, что в любом случае вы не должны использовать указатели напрямую, и им следует предпочесть использовать тип RAII, известный как умные указатели . Если вы находитесь на земле C, то вероятные указатели являются для вас второй натурой, но даже в этом случае они помогают в некоторой степени абстрагировать их.
Если вы используете их в C #, просто имейте в виду, что существует очень реальный потенциал, вы можете добавить уязвимости безопасности или действительно неприятные и трудные для отслеживания ошибок. Вам также нужно помнить, что вы должны быть осторожны, чтобы не ссылаться на объекты, которые могут быть перемещены GC. Обратите внимание на использование фиксированного оператора здесь .
Вы также можете использовать указатели в Unity, написав собственный плагин . Это опять-таки исключит сборку веб-плеера, но новая функция HTML5 работает на основе emscripten, поэтому, если вы планируете использовать это, вы, вероятно, могли бы, если вы будете осторожны. Собственные плагины позволяют расширять Unity для каждой платформы. Я написал собственный плагин для связи с некоторыми микроконтроллерами через последовательное соединение, например.
Подводя итог, вы должны определенно спросить себя, почему я хочу использовать указатели в C # в Unity. Если вы просто хотите сделать это для удовольствия ... Вышибите себя.
Изменить:
Извините, если я кого-то обидел, потому что я знаю, что мои мысли о GC не являются популярным мнением в настоящее время.
Если вы действительно прочитаете мой ответ, вы заметите, что я не называю C # языком сценариев. Я сравниваю его со «многими языками сценариев», однако в контексте Unity он очень часто используется в качестве языка сценариев. Это что-то вроде DSL для Unity, если хотите. Часто вы увидите, что в этом контексте его даже называют сценарием Unity (это в основном относится к Javascript-альтернативе Unity для C #). Если вы добавите LLVM в свой конвейер, вы можете просто скомпилировать его в нативный код для платформы напрямую ... тогда как бы вы это назвали? Так что, на самом деле, я не хотел здесь раскалываться.
Многие замечательные ссылки на разработку программного обеспечения наполнены мнением:
Эффективный C ++ ,
Более эффективный C ++ ,
C ++ FAQ ,
Эффективный C # ,
Современный дизайн C ++ ,
Шаблоны проектирования
... И бесчисленное множество других. Я не чувствую, что это делает аргументы менее заслуживающими доверия, если они сопровождаются вдумчивым объяснением.
Я не совсем сказал: «Никогда не используйте указатели!» , На самом деле я до сих пор использую их голыми. Я сказал «в общем», как в «предпочитаю использовать безопасный код небезопасному коду в C #». Бывают ситуации, когда это может быть полезным, и это одна из действительно мощных возможностей C # для выбора инструментов. C # даже позволяет вам в некоторой степени иметь прозрачность в процессе GC, в отличие от таких языков, как Dart, и может очень легко привести к утечке ресурсов. Конечно, если вы являетесь единственным разработчиком небольшого проекта, это вряд ли проблема. Если вы работаете в команде, скажем, 10+ с сотнями тысяч строк кода, то это может быть сложно.
Я просто хотел, чтобы читатель проявлял осторожность при использовании голых указателей. Сродни тому, чтобы быть очень осторожным при работе с сетевым электричеством. Я не говорю, не будьте электриком, просто если вы делаете неправильный ход и не относитесь к нему с уважением, вы мертвы.
Мне нравится пример, приведенный Лассе, в котором производительность, возможно, продиктовала необходимость.