Часть 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.