Fix memory leak in step 7
This commit is contained in:
parent
dbfbb27044
commit
c9be0f2d2f
@ -22,6 +22,10 @@ GameState::GameState(int numberOfRobots) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
GameState::~GameState(){
|
GameState::~GameState(){
|
||||||
|
clearUnits();
|
||||||
|
}
|
||||||
|
|
||||||
|
void GameState::clearUnits(){
|
||||||
for (Unit *unit: units)
|
for (Unit *unit: units)
|
||||||
delete unit;
|
delete unit;
|
||||||
units.clear();
|
units.clear();
|
||||||
@ -63,6 +67,23 @@ 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 GameState::countToBeJunked() const {
|
||||||
int numberDestroyed = 0;
|
int numberDestroyed = 0;
|
||||||
for (const Unit *const unit: units)
|
for (const Unit *const unit: units)
|
||||||
|
@ -27,7 +27,8 @@ public:
|
|||||||
|
|
||||||
~GameState();
|
~GameState();
|
||||||
|
|
||||||
|
GameState &operator=(const GameState &other);
|
||||||
|
GameState(const GameState &other);
|
||||||
/*
|
/*
|
||||||
* Clear and redraw entire playing field
|
* Clear and redraw entire playing field
|
||||||
*/
|
*/
|
||||||
@ -84,6 +85,7 @@ private:
|
|||||||
|
|
||||||
// private helpers
|
// private helpers
|
||||||
bool isEmpty(const Unit& unit) const;
|
bool isEmpty(const Unit& unit) const;
|
||||||
|
void clearUnits();
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -14,3 +14,6 @@ void Hero::draw(QGraphicsScene *scene) const {
|
|||||||
UNIT_WIDTH, UNIT_HEIGHT), Qt::NoPen, QBrush(HERO_COLOR));
|
UNIT_WIDTH, UNIT_HEIGHT), Qt::NoPen, QBrush(HERO_COLOR));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Unit *Hero::clone() const {
|
||||||
|
return new Hero(*this);
|
||||||
|
}
|
||||||
|
@ -12,11 +12,12 @@
|
|||||||
class Hero : public Unit {
|
class Hero : public Unit {
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
Unit *clone() const override;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Draws this hero onto the given QGraphicsScene.
|
* Draws this hero onto the given QGraphicsScene.
|
||||||
*/
|
*/
|
||||||
void draw(QGraphicsScene *scene) const;
|
void draw(QGraphicsScene *scene) const override;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -19,3 +19,7 @@ bool Junk::isAlive() const { return false; }
|
|||||||
bool Junk::isToBeJunked() const { return false; }
|
bool Junk::isToBeJunked() const { return false; }
|
||||||
void Junk::doCrash() {}
|
void Junk::doCrash() {}
|
||||||
void Junk::moveTowards(const Point &) {}
|
void Junk::moveTowards(const Point &) {}
|
||||||
|
|
||||||
|
Unit *Junk::clone() const {
|
||||||
|
return new Junk(*this);
|
||||||
|
}
|
||||||
|
@ -12,7 +12,7 @@
|
|||||||
class Junk : public Unit {
|
class Junk : public Unit {
|
||||||
public:
|
public:
|
||||||
Junk(const Point& p): Unit(p){}
|
Junk(const Point& p): Unit(p){}
|
||||||
|
Unit *clone() const override;
|
||||||
/*
|
/*
|
||||||
* Draws this junk onto the given QGraphicsScene.
|
* Draws this junk onto the given QGraphicsScene.
|
||||||
*/
|
*/
|
||||||
|
@ -25,4 +25,6 @@ void Robot::draw(QGraphicsScene *scene) const {
|
|||||||
JUNK_RADIUS, JUNK_RADIUS), QPen(), QBrush(ROBOT_COLOR));
|
JUNK_RADIUS, JUNK_RADIUS), QPen(), QBrush(ROBOT_COLOR));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Unit *Robot::clone() const{
|
||||||
|
return new Robot(*this);
|
||||||
|
}
|
||||||
|
@ -13,7 +13,7 @@ class Robot : public Unit {
|
|||||||
bool toBeJunked = false;
|
bool toBeJunked = false;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
Unit* clone() const override;
|
||||||
/*
|
/*
|
||||||
* did not crash yet
|
* did not crash yet
|
||||||
*/
|
*/
|
||||||
|
@ -28,6 +28,8 @@ public:
|
|||||||
|
|
||||||
virtual ~Unit(){}
|
virtual ~Unit(){}
|
||||||
|
|
||||||
|
virtual Unit *clone() const = 0;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Return Point representation of Unit
|
* Return Point representation of Unit
|
||||||
*/
|
*/
|
||||||
|
Loading…
x
Reference in New Issue
Block a user