Thread overview
Changing by ref a class passed in function
Jan 22, 2015
Zaher Dirkey
Jan 22, 2015
anonymous
Jan 22, 2015
anonymous
Jan 22, 2015
Zaher Dirkey
January 22, 2015
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.
January 22, 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. */
January 22, 2015
On Thursday, 22 January 2015 at 14:29:59 UTC, anonymous wrote:
> o needs to be typed as Object:
>
>     Object o = new MyClass();
>     nullIt(o);

Alternatively, templatize nullIt:

    void nullIt(O)(ref O o) {o = null;}
    auto o = new MyClass();
    nullIt(o);
January 22, 2015
On Thursday, 22 January 2015 at 14:39:45 UTC, anonymous wrote:
> On Thursday, 22 January 2015 at 14:29:59 UTC, anonymous wrote:
>> o needs to be typed as Object:
>>
>>    Object o = new MyClass();
>>    nullIt(o);
>
> Alternatively, templatize nullIt:
>
>     void nullIt(O)(ref O o) {o = null;}
>     auto o = new MyClass();
>     nullIt(o);

Template way is better here, thank you.