dereferencing null

Timon Gehr timon.gehr at gmx.ch
Wed Mar 7 01:41:33 PST 2012


On 03/07/2012 02:40 AM, Chad J wrote:
> But to initialize non-null fields, I suspect we would need to be able to
> do stuff like this:
>
> class Foo
> {
> int dummy;
> }
>
> class Bar
> {
> Foo foo = new Foo();
>
> this() { foo.dummy = 5; }
> }
>
> Which would be lowered by the compiler into this:
>
> class Bar
> {
> // Assume we've already checked for bogus assignments.
> // It is now safe to make this nullable.
> Nullable!(Foo) foo;
>
> this()
> {
> // Member initialization is done first.
> foo = new Foo();
>
> // Then programmer-supplied ctor code runs after.
> foo.dummy = 5;
> }
> }
>
> I remember C# being able to do this. I never understood why D doesn't
> allow this. Without it, I have to repeat myself a lot, and that is just
> wrong ;).]

It is not sufficient.

class Bar{
     Foo foo = new Foo(this);
     void method(){...}
}
class Foo{
     this(Bar bar){bar.foo.method();}
}


More information about the Digitalmars-d mailing list