Часть II
Продолжая часть I, здесь приведены реализации cleanup
, moveFrom
, конструктора перемещения и оператора присваивания перемещения.
void Bank::cleanup() noexcept { delete[] mCheckingAccounts; mCheckingAccounts = nullptr; mName = ""; mNumAccounts = 0; } void Bank::moveFrom(Bank &src) noexcept { //Shallow copy first. Move objects. mNumAccounts = src.mNumAccounts; mCheckingAccounts = src.mCheckingAccounts; mName = std::move(src.mName); //Ownership has moved, reset the source object src.mName = ""; src.mNumAccounts = 0; src.mCheckingAccounts = nullptr; } //Move constructor Bank::Bank(Bank&& src) noexcept { moveFrom(src); } //Move assignment operator Bank&::Bank::operator=(Bank && rhs) noexcept { if(this == &rhs) { return *this; } cleanup(); moveFrom(rhs); return *this; }
Правило пяти
Правило пяти гласит, что при динамическом выделении памяти в классе следует реализовать деструктор, конструктор копирования, конструктор перемещения, оператор присваивания копирования и оператор присваивания перемещения.
Использованная литература:
Грегуар, М. (2018). Профессиональный C++. Индиана, Индиана: John Wiley & Sons.