Aquivalent References as in C++?

Dejan Lekic dejan.lekic at gmail.com
Tue Apr 17 08:36:31 PDT 2012


On Tuesday, 17 April 2012 at 09:39:10 UTC, Namespace wrote:
> On Tuesday, 17 April 2012 at 08:02:02 UTC, Namespace wrote:
>> Now i have something like this. It works and manipulates 
>> lvalues so that i can pass my objects by ref to except null.
>>
>> But is this smart?
>>
>> class Bar {
>> public:
>> 	int x;
>> 	
>> 	static ref Bar opCall(int x) {
>> 		static Bar b;
>> 		
>> 		b = new Bar(x);
>> 		
>> 		return b;
>> 	}
>> 	
>> 	this(int x) {
>> 		this.x = x;
>> 	}
>> }
>>
>> class Foo {
>> private:
>> 	Bar _bar;
>>
>> public:
>> 	int y;
>> 	
>> 	this() { }
>> 	
>> 	this(ref Bar b) {
>> 		//assert(b !is null);
>> 		
>> 		writefln("B.x %d", b.x);
>> 	}
>> }
>>
>> Bar b = new Bar(42);
>> 	
>> new Foo(b); // works
>> new Foo(null); // compiler error
>> new Foo(Bar(23)); // works
>> new Foo(Bar(25)); // works
>
>
> But if I write
>
> Bar bn;
> new Foo(bn);
>
> it works also and doesn't throw a compiler error.
> To avoid this, I have to write an assert(obj !is null); again.
> This really sucks. If anybody else works with my Code and puts 
> a null reference to any method he gets no compiler error and 
> wonder why he gets a runtime error instead.
> Thats very annoying...

For that, you have static if contitions, and indeed you can make 
it a compile-time error.


More information about the Digitalmars-d-learn mailing list