On Thursday, 30 August 2012 at 07:35:34 UTC, Namespace wrote:

I had totally forgotten what it says in "The book" about struct and class construction. It's basically that all fields are first initialized to either T.init or by using the field's initializer. That means the use of ref inside class or struct would be quite restricted:

int globalVal;

struct MyStruct
{
   // ref int defaultInitRef; // Illegal: reference variables
                              // can't be default initialized

But you can handle it like const members: you have to initialize these members in the ctor.

Furthermore I suggest that with "ref" marked Objects _can't_ be null.
So ref Foo fr = null; is equally forbidden as
[code]
Foo f; // same as Foo f = null;
ref Foo fr = f;
[/code]
Why? First: null isn't an lvalue and even if "Foo f;" is one: if it would be allowed, you have a useless reference, because it is null and you can't assign a valid object to it (because you can assign ref's just once) Furthermore it solve the problem which I often annotate: not null paramters. void do_something(ref Foo fr) { <- "fr" can't be null, you can trust it without any other validations.
I would love that. :)

Reply via email to