當我嘗試刪除動態矢量對象的動態內存元素時,我不得不遍歷整個矢量大小,以確保完全釋放。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
的載體,似乎當我試圖刪除遍歷每第二個元素,因爲我需要額外的while循環,以保證總的釋放。
我似乎錯過了一些有關矢量的內部工作原理,我試過閱讀矢量C++參考,並且我知道矢量將元素存儲在一個連續的位置,並且他們爲可能的增長分配額外的存儲空間,但是我失敗了了解此代碼的行爲。
'汽車=新的向量;'這是一個壞主意,爲什麼不'矢量汽車;'?你拿着原始指針項目已經足夠複雜了一切...... –
你注意到有'std :: erase()'函數順便說一句。 –
@πάνταῥεῖ沒有'std :: erase'功能。你的意思是'std :: vector :: erase'或'std :: remove'? –