Classes and class hierarchies
C.83
Для типов, похожих на значения, рассмотрите возможность предоставления функции `noexcept` swap
Причина
A swap может быть удобным для реализации ряда идиом, от плавного перемещения объектов до простой реализации присваивания до предоставления гарантированной функции коммита, которая позволяет код сильно устойчив к ошибкам. Рассмотрите использование swap для реализации копирования назначения в терминах конструкции копирования. См. также деструкторы, освобождение и swap никогда не должны давать сбой.
Хороший пример
class Foo {
public:
void swap(Foo& rhs) noexcept
{
m1.swap(rhs.m1);
std::swap(m2, rhs.m2);
}
private:
Bar m1;
int m2;
};
Предоставление функции swap без члена в том же пространстве имен, что и ваш тип, для удобства вызывающего.
void swap(Foo& a, Foo& b)
{
a.swap(b);
}
Применение
- Нетривиально копируемые типы должны предоставить функцию swap члена или перегрузку swap без члена.
- (Simple) Когда класс имеет функцию-член
swap, она должна быть объявленаnoexcept.