
"Jody Hagins" <jody-boost-011304@atdesk.com> escribió en el mensaje news:20050215103732.03af02c0.jody-boost-011304@atdesk.com...
Actually, there are multiple assignment operators, with different levels of complexity and "bugginess."
Care to detail these levels of "bugginess"? Only one of the assignment overloads suffers from the self-assignment bug anyway.
It seems to me that implementing the canonical assignment operator would work fine...
optional & operator=(optional const & rhs) { optional tmp(rhs); optional_swap(*this, tmp); return *this; }
The purpose of this idiom is provide a better exception guarantee based on a safe swap (preferably a non throw swap). If the swap is no better (exception-safety-wise) than a straight assignment, the idiom is unnecesary. It turns out that optional_swap gives only the basic guarantee, and so does assign(), so there is no point in this.
This actually brings me to a more broad question... with a fairly well accepted practice for safe implementation of assignment operators, some boost libs seem to go out of their way to implement something different. Is this because of perceived performance issues, or something else?
Something else: purpose. The right idiom in the wrong place (or context) is a Bad Thing. Best Fernando Cacciola