Когда я пытаюсь удалить элементы динамической памяти динамического вектора объектов, я должен повторить все размеры вектора более одного раза, чтобы обеспечить полное освобождение.Выделение/удаление векторной динамической памяти C++ вектор
class CV{
public:
float x;
float y;
CV();
CV(float, float);
~CV();
};
int main(){
vector<CV*>* cars;
cars = new vector<CV*>;
//create objects with new, push into vetor
for(int j=0;j<4;j++){
cars->push_back(new CV(10.0+j, 11.99+j));
}
while(cars->size() > 0 ){
for(int i=0;i<cars->size();i++){
delete (*cars)[i];
cars->erase(cars->begin()+i);
}
cout << "size:"<< cars->size() << endl;
}
delete cars;
return 0;
}
Этот выход будет:
size:2
size:1
size:0
Вектор кажется перебрать каждый второй элемент, когда я пытаюсь удалить, так как я требую дополнительное время цикла, чтобы обеспечить полное освобождение.
У меня, кажется, что-то не хватает о внутренних функциях вектора, я пробовал читать векторную ссылку C++, и я понимаю, что векторы хранят элементы в смежном местоположении и что они выделяют дополнительное хранилище для возможного роста, но я терпит неудачу чтобы понять поведение этого кода.
'автомобили = новый вектор;' Это плохая идея, почему бы не просто 'вектор автомобилей;'? То, что у вас есть необработанные указательные элементы, усложняет все, что уже достаточно ... –
Вы заметили, что есть функция 'std :: erase()' BTW. –
@ πάνταῥεῖ Нет функции 'std :: erase'. Вы имели в виду 'std :: vector :: erase' или' std :: remove'? –