Я редко вижу необработанный указатель в D. Для массивов вы используете срезы (например, int[]
).Чтобы передать что-либо по ссылке, вы объявляете это как ref
параметр.Вы используете классы там, где они подходят, и есть RefCounted
, который по сути является интеллектуальным указателем.
Вероятно, наиболее распространенной заменой указателей в D являются фрагменты (и указатель может во многихпути считаются срезом, который содержит либо ноль, либо один элемент).То есть, если вы не учитываете this
, который также по сути является указателем.
Срезы D - это просто тонкие обертки вокруг указателей, так что вы можете в основном делать с ними точно такие же вещи, но обычныеоперации безопаснее с ломтиками.Компромисс заключается в том, что он немного медленнее, так как доступ к элементу проверяется по диапазону.
Поскольку вы говорите, что пришли из Java-фона, я добавлю, что вы можете написать почти такой же код на D,и он скомпилируется и запустится, и будет делать то же самое, что и в Java.Это не будет идиоматический D, но он будет работать.
Обновление, поскольку вопрос изменился:
В примере кода нет причин использовать указатели вместо refпараметры - он должен компилироваться с точно таким же машинным кодом.Как правило, указатели следует использовать только тогда, когда вы собираетесь выполнять арифметику указателей.Если вы не уверены, что собираетесь, просто предположите, что не будете.