Ich habe eine Reihe von Fällen, in meinem Code wie folgt aus:Wie zähle ich nicht gelöschte Instanzen im Array von Instanzen?
class Squad : public ISquad
{
public:
Squad(void);
Squad(Squad const & src);
virtual ~Squad(void);
int getCount(void) const;
int push(ISpaceMarine*);
ISpaceMarine* getUnit(int) const;
ISpaceMarine** getUnits(void) const;
int getCapacity(void) const;
Squad & operator=(Squad const & rhs);
private:
ISpaceMarine **_units; // HERE IS THE ARRAY OF INSTANCES
int const _squadCapacity;
};
wie diese Initialized im Konstruktor
Squad::Squad(void) : _units(new ISpaceMarine*[64]), _squadCapacity(64)
{
return;
}
Erstens ist das der gute Weg zu tun?
Wenn ja, versuche ich die Anzahl der gültigen Instanzen im Array zu zählen (nicht NULL
, nicht deleted
), aber ich weiß nicht, wie man zum Beispiel überprüft, ob _units[20]
gelöscht wird.
Wie kann ich es tun?
Er ist meine aktuelle Art und Weise zu tun:
int Squad::getCount(void) const
{
int count = 0;
while (this->_units[count] != NULL && count < this->_squadCapacity)
count++;
return count;
}
mit Warum sind Sie nicht STL-Container mit? 'std :: list' scheint angemessen. – JHBonarius
Sie können nicht überprüfen, ob das Ziel eines Zeigers gelöscht wird. Setzen Sie es direkt nach dem Löschen auf 'NULL'. Oder entfernen Sie es aus der Liste. oder verwenden Sie intelligente Zeiger. – flyx
Sie können nicht überprüfen, ob ein Zeiger gültig ist. Verwenden Sie keine rohen Zeiger. –