Is the automatic opAssign exception-safe?
Ali Çehreli
acehreli at yahoo.com
Sun Dec 27 11:32:00 PST 2009
Does opAssign still work the way I quote from
http://digitalmars.com/d/2.0/struct.html:
<quote>
S* opAssign(S s)
{ ... bitcopy *this into tmp ...
... bitcopy s into *this ...
... call destructor on tmp ...
return this;
}
</quote>
The reason for the temporary must be exception safety. Otherwise, one
would simply destroy *this and then copy from s. Am I correct?
Additionally, I suspect that the 'bitcopy's above are actually
memberwise copies, calling each member's post-blit function. If so, then
a member's post-blit may throw and the above code is not exception-safe
anymore.
Is the documentation old, and opAssign is in fact exception-safe? If it
was never intended to be, then why the temporary?
Thank you,
Ali
More information about the Digitalmars-d
mailing list