Changing by ref a class passed in function

anonymous via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Thu Jan 22 06:29:58 PST 2015


On Thursday, 22 January 2015 at 13:06:42 UTC, Zaher Dirkey wrote:
> See example bellow, i want to pass object to function nullIt 
> and want this function to null it.
>
> ----
> import std.stdio;
>
> static if (!is(typeof(writeln)))
> 	alias writefln writeln;
>
>
> class MyClass{
> 	
> }
>
> void nullIt(ref Object o)
> {
> 	o = null;
> }
>
> void main()
> {
> 	auto o = new MyClass();
> 	
> 	nullIt(o);
> 	
> 	if (o is null)
> 		writeln("It is null");
> }
>
> Thanks in advance.

o needs to be typed as Object:

     Object o = new MyClass();
     nullIt(o);

If the compiler accepted your original code, it would be possible 
to assign a non-MyClass to o:

     void messWithIt(ref Object) o) {o = new Object;}
     auto o = new MyClass();
     messWithIt(o); /* If this compiled, o would be typed as 
MyClass, but would not actually be a MyClass. */


More information about the Digitalmars-d-learn mailing list