Hello everyone,


The following swap technique is used to make assignment operator exception safe (means even if there is exception, the current object instance's state is invariant).

It used a temporary object "temp" in this sample, and assignment is made on a to temp ar first. Even if there is exception, the current this object's state is not corrupted.

My question is, the pattern works only if there is no exception thrown by swap function. If there are exception in swap function, the state of current object instance may still be corrupted (swap may invoke the assignment operator of member variables). Is my understanding correct?

Code:
class A;
A& A::operator= (const A& a)
{
    A temp;
    temp = a; // exception may be thrown
    swap (*this, temp);
}

thanks in advance,
George