Как говорит Стивен, используйте std::swap(var1, var2);
Это шаблонная функция, поэтому вы можете предоставить свои собственные специализации для определенных классов, таких как умные указатели, которые могут иметь дорогие операторы присваивания:
namespace std
{
template<>
void swap<MySmartPointer>(MySmartPointer& v1, MySmartPointer& v2)
{
std::swap(v1.internalPointer, v2.internalPointer);
}
}
// ...
std::swap(pointerA, pointerB); // super-fast!!!!1