Использование 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.