Использование swap

При использовании moveFrom, если добавляется новый элемент данных, необходимо изменить как swap, так и moveFrom. Чтобы избежать этого, можно написать конструктор перемещения и оператор присваивания перемещения с конструктором по умолчанию и функцией swap.

class Bank
{
    private: 
        Bank() = default;
}

Теперь cleanup() и moveFrom() можно удалить. Деструктор обрабатывает код из cleanup. Код выглядит следующим образом:

Bank::Bank(Bank&& src) noexcept : Bank()
{ 
    swap(*this,src); //Default constructor creates *this.
}
Bank& Bank::operator=(Bank&& rhs) noexcept
{
    Bank temp(std::move(rhs)) //Need std::move because rhs is named
    swap(*this,temp);
    return *this;
}

Реализация swap с семантикой перемещения

Использование семантики перемещения улучшает производительность swap, как показано ниже:

void swap(T &a , T&b)
{
    T temp(std::move(a));
    a = std::move(b);
    b = std::move(temp);
}

Правило нуля

В современном C++ предпочтение отдается правилу нуля. В нем говорится, что дизайн класса устраняет необходимость в пяти специальных функциях-членах, избегая выделения памяти в устаревшем стиле и используя контейнеры STL. Например, используйте vector<CheckingAccount> вместо CheckingAccount*.

Статические методы

Статические методы связаны с самим классом и не работают ни с какими членами класса. Они могут получить доступ к private и protected static членам класса. Если передается ссылка на объект, они также могут получить доступ к private и protected нестатическим элементам данных для объектов того же типа.

Перегрузка метода

Вы можете перегружать методы, если количество и/или типы параметров различаются.

Встроенные методы

Компилятору можно порекомендовать, чтобы метод или функция встраивали его. Это всего лишь намек, а не гарантия того, что компилятор его учтет. Определения inline методов должны быть помещены в заголовочный файл вместе с их прототипами.

Статические элементы данных

Статический элемент данных связан с классом, а не с конкретным объектом. Например, банк может поддерживать количество текущих счетов, которые он имеет, со статическим членом данных.

Использованная литература:

Грегуар, М. (2018). Профессиональный C++. Индиана, Индиана: John Wiley & Sons.