On Saturday, 15 September 2012 at 14:17:53 UTC, Simen Kjaeraas wrote:
And in real code it could crash after dereferencing and before passing to bar, if accessed (meaning that problem is in erroneous pointer usage, not accepting ints through reference in bar). Certainly, it is possible to break even in such cases, as well as in other parts of the language which doesn't necessarily mean that such parts of the language are broken. What I was talking about is:

void bar( ref int n ) {
    n = 3;
}

void main( ) {
    int* p = null;
    bar(p); // error
    bar(null); //error
}

But that's like saying bar(int n) doesn't accept null as a parameter - of
course it doesn't - int and int* are different types.

What I'm saying is references may be a bit safer than pointers, but the
'guarantee' that they're not null pointers in disguise is a lie.

Again, what is the talk about? References in function parameters or class objects? In the first case ref parameter has nothing to do with whether was a valid object passed to function or not (as like in your case). It only means that function works with actual object, not a copy. Obviously, it is impossible to pass a pointer or null when other type is expected.

If you speaking about class objects, than certainly it may reference a valid region of memory or null (in bad and rare cases, to random memory).

Reply via email to