October 22, 2011 opAssign for structs | ||||
---|---|---|---|---|
| ||||
In the language definition <http://d-programming-language.org/struct.html>, it says: > Struct assignment t=s is defined to be semantically equivalent to: > t = S.opAssign(s); > where opAssign is a member function of S: > S* opAssign(S s) > { ... bitcopy *this into tmp ... > ... bitcopy s into *this ... > ... call destructor on tmp ... > return this; > } I'm struggling with this on 4 fronts: 1. What is `this`, when opAssign is called off of the type? (does it even make sense to call a member function without an instance?) 2. The return value of opAssign is `S*`, so it would seem that `t` is assigned a pointer value? 3. What is `tmp`, just another stack allocated instance of S? 4. What is the syntax for explicitly calling the destructor? (In C++, it is tmp.~S(), but in D would it be tmp.~this() or what?) |
October 22, 2011 Re: opAssign for structs | ||||
---|---|---|---|---|
| ||||
Posted in reply to Sean Silva | On Sat, 22 Oct 2011 03:21:09 +0000, Sean Silva wrote: > I'm struggling with this on 4 fronts: > > 1. What is `this`, when opAssign is called off of the type? (does it even make sense to call a member function without an instance?) Please file a bug on http://d.puremagic.com/issues/ The example doesn't even compile: Error: cannot implicitly convert expression (this) of type S to S* > 2. The return value of opAssign is `S*`, so it would seem that `t` is assigned a pointer value? The correct information is: t=s is defined to be semantically equivalent to: t.opAssign(s) which means a signature of just void opAssign(ref const S rhs) { //... } > 3. What is `tmp`, just another stack allocated instance of S? I think it is just an example of something you might do. > 4. What is the syntax for explicitly calling the destructor? (In C++, it > is tmp.~S(), but in D would it be tmp.~this() or what?) You don't. If you want to destroy use, clear(s); |
Copyright © 1999-2021 by the D Language Foundation