Сводка : у вас есть новые объекты.Всегда.
Классы D ближе к C # или Java, чем к C ++.В частности, объекты всегда являются всегда ссылочными значениями.
MyObject, под капотом, является указателем на фактический объект.Таким образом, когда вы используете MyObject obj;
, вы создаете указатель null
и фактически не создаете объект.Объект должен быть создан с помощью оператора new
:
auto obj = new Object();
Это создает объект в куче.
Вы не можете напрямую создавать объекты в стеке в D. Лучшее, что вы можете сделатьвыглядит примерно так:
scope obj = new MyObject;
Компилятор позволяет помещать объект в стек, но не обязан.
(На самом деле, я подозреваю,это может исчезнуть в будущей версии D2.)
На заметку, если вы используете D2, то я считаю, что ваша основная функция должна выглядеть следующим образом:
int main(string[] args)
{
...
}
char[]
и string
имеют одинаковую физическую структуру, но означают немного разные вещи;в частности, string
- это просто псевдоним для immutable(char)[]
, поэтому, используя char[]
, вы обойдете защиту системы const.