Вы инициализировали все доступные места на 0 / null, поэтому на этапе очистки просто переберите все 100 элементов и удалите каждый элемент.
(Редактировать: проверка на нулевой указатель перед удалением избыточна, не важно).
В качестве альтернативы используйте std :: vector, если вам разрешено использовать STL.
Затем просто выполните итерацию по вектору и удалите их все, поскольку у вас будет только столько элементов в векторе, сколько вы на самом деле используете. (Если вы работаете только с push и pop).
Чтобы удалить что-либо из используемого вектора (который не будет полностью очищен), нужно поменять элемент, который вы хотите удалить, на vector.back()
, затем удалить vector.back()
, а затем pop_back()
.
Примечание: это делает недействительными любые итераторы, вам нужно будет назначить их должным образом, или в случае только одного элемента, который вы хотите удалить, просто вырвитесь из цикла итерации через break
или return
.
#include "Passenger.h"
#include "EconomyClass.h"
#include "FirstClass.h"
#include <vector>
int main()
{
std::vector<Passenger*> passengers
//add passengers the vector grows when needed, it does so by copying the items, which, in the
//case of raw pointers like this, fast.
passengers.push_back(new FirstClass(name, purpose, chair));
passengers.push_back(new EconomyClass(name, purpose, food));
//delete all, starting from the back of the stack
//check the std::vector reference online for details
std::vector<Passenger*>::reverse_iterator start,end;
start = passengers.rbegin();
end = passengers.rend();
//iterate through all items, in this case, 2
for(;start!=end;++start)
{
delete *start;
}
//optional since it would get called on cleanup anyway)
passengers.clear();
}