Add move constructor/operator=

This commit is contained in:
Love 2024-09-11 17:29:35 +02:00
parent 0bcf77a56b
commit 1b49bc799b
2 changed files with 39 additions and 17 deletions

View File

@ -31,6 +31,39 @@ void GameState::clearUnits(){
units.clear();
}
GameState &GameState::operator=(const GameState &other) {
if (this == &other)
return *this;
clearUnits();
for (const Unit *const unit : other.units)
units.push_back(unit->clone());
hero = other.hero;
return *this;
}
GameState::GameState(const GameState &other) : hero(other.hero) {
clearUnits();
for (const Unit *const unit : other.units)
units.push_back(unit->clone());
}
GameState &GameState::operator=(GameState &&other) noexcept {
if (this == &other)
return *this;
clearUnits();
hero = std::move(other.hero);
units = std::move(other.units);
other.units.clear();
return *this;
}
GameState::GameState(GameState &&other) noexcept : units(std::move(other.units)), hero(std::move(other.hero)) {
other.units.clear();
}
void GameState::draw(QGraphicsScene *scene) const {
scene->clear();
hero.draw(scene);
@ -67,23 +100,6 @@ void GameState::updateCrashes() {
}
}
GameState &GameState::operator=(const GameState &other) {
if (this == &other)
return *this;
clearUnits();
for (const Unit *const unit : other.units)
units.push_back(unit->clone());
hero = other.hero;
return *this;
}
GameState::GameState(const GameState &other) : hero(other.hero) {
clearUnits();
for (const Unit *const unit : other.units)
units.push_back(unit->clone());
}
int GameState::countToBeJunked() const {
int numberDestroyed = 0;
for (const Unit *const unit: units)

View File

@ -27,8 +27,14 @@ public:
~GameState();
// Copy
GameState &operator=(const GameState &other);
GameState(const GameState &other);
// Move
GameState &operator=(GameState &&other) noexcept;
GameState(GameState &&other) noexcept;
/*
* Clear and redraw entire playing field
*/