Резюме: вам нужны новые объекты. Всегда.
Классы 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.
person
DK.
schedule
07.07.2010