В следующем примере кода milk
инициализируется конструктором, а egg
- нет. milk.spill()
не segfault, но egg.crack()
. В чем разница между двумя способами инициализации переменной экземпляра? Почему первое правильное, в то время как последнее вызывает segfaults?В чем разница между инициализацией переменных экземпляра в & из конструктора?
import std.stdio;
void main() {
auto k = new Kitchen();
k.pollute();
}
class Kitchen {
Milk milk;
Egg egg = new Egg();
this() {
milk = new Milk();
}
void pollute() {
writeln("spilling milk");
milk.spill();
writeln("cracking egg");
egg.crack();
}
}
class Milk {
bool spilt = false;
void spill() { spilt = true; }
}
class Egg {
bool cracked = false;
void crack() { cracked = true; }
}
Вы уверены, что предоставили вам правильный пример? Оно работает. Возможно, вы хотели удалить часть «= new Egg();»? –
egg.crack не должен был там преградить, и не для меня. Есть разница между двумя строками, важное отличие, которое смущает людей, и я могу это записать, но ваш примерный код работает для меня. Это для вас тоже непоправимо или это отрывок из более крупной вещи? –
У меня когда-то была эта проблема. Как сообщество объясняло мне все это: http://forum.dlang.org/post/[email protected] – sigod