Classes and class hierarchies
C.84
Функция `swap` не должна давать сбой
Причина
swap широко используется способами, которые предполагаются никогда не сбивать, и программы не могут легко быть написаны, чтобы работать правильно при наличии сбойного swap. Контейнеры стандартной библиотеки и алгоритмы не будут работать правильно, если swap типа элемента не сработает.
Плохой пример
void swap(My_vector& x, My_vector& y)
{
auto tmp = x; // copy elements
x = y;
y = tmp;
}
Это не просто медленно, но если выделение памяти происходит для элементов в tmp, то этот swap может выбросить и сделает алгоритмы STL неудачными при использовании с ними.
Применение
(Simple) Когда класс имеет функцию-член swap, она должна быть объявлена noexcept.