alias this and null reference
Namespace
rswhite4 at googlemail.com
Fri Apr 27 09:36:03 PDT 2012
By the following code i get a normal Access Violation.
My question is: why? Even if "f0" is null, the object must be
converted to Ref and there i check if the given object is null.
Here is the Code:
[code]
// Ref.d
struct Ref(T : Object) {
private:
T _val;
public:
@disable
this();
@disable
this(typeof(null));
@disable
typeof(this) opAssign(typeof(null));
this(T val) {
assert(val !is null);
this._val = val;
}
@property
T get() {
return this._val;
}
}
mixin template TRef(T) {
@property
Ref!(T) getRef() {
assert(this !is null);
return Ref!(T)(this);
}
alias getRef this;
}
// main.d
class Foo {
private:
string _val;
public:
this() { }
void Set(string val) {
this._val = val;
}
void speak() const {
writeln(this._val);
}
mixin TRef!(typeof(this));
}
void with_ref(Ref!(Foo) rf) {
rf.get.speak();
}
void without_ref(Foo f) {
f.speak();
}
void main() {
Foo f0; // f0 is null
with_ref(f0); // converting with alias this. But what if f0 is
null?
Foo f1 = new Foo();
f1.Set("Foo!");
with_ref(f1);
without_ref(f1);
readln();
}
[/code]
More information about the Digitalmars-d-learn
mailing list