在下面的代码示例中,milk由构造函数初始化,而egg不是.milk.spill()不是段错误,但egg.crack()确实如此.初始化实例变量的两种方法有什么区别?为什么前者正确而后者导致段错误?
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; }
}
Run Code Online (Sandbox Code Playgroud) d ×1