[英]deleting a vector of pointers
假設我有一個向量
std::vector<float*> vec;
現在我知道我需要刪除向量中的指針以回收內存。 我知道的方法是遍歷向量並刪除每個指針。 我想知道是否有更快的方法來完成此任務。
我有以下情況
std::vector<float*> cont;
for(int i=0; i < SelectedColumns.size();i++)
{
if(someList.count()>0)
{
float *a = new float( column_cell_mapper[SelectedColumns[i]]->text().toFloat());
cont.push_back(a);
someclass.somemethod(*a) // Requires a reference
....
....
}
}
someclass.process();
使用std::unique_ptr
。 當向量超出范圍時,每個float
將被破壞,而無需您進行額外的工作。
std::vector<std::unique_ptr<float>> vec
如果您真的只是想要一個包含float
數組的容器,請參閱Mark B的答案,並改用std::vector<std::vector<float>>
。
編輯:
您能否擺脫將函數調用與插入向量相反的順序? 例如,您可以這樣做嗎?
float a = column_cell_mapper[SelectedColumns[i]]->text().toFloat();
someclass.somemethod(a) // Requires a reference
cont.push_back(a);
原始答案:
只是不要通過指針存儲浮點,而是使用std::vector<float>
代替。 對於像float這樣的小型簡單類型,使用額外的間接級別不會為您帶來任何好處。 如果確實需要通過指針存儲單個浮點數,則可以將std::unique_ptr
與C ++ 11一起使用,或者將boost::shared_ptr
與以前的C ++版本一起使用。
現在,如果您的float*
指向一個float*
數組 ,則仍然不要那樣做。 而是這樣使用向量的向量:
std::vector<std::vector<float> > vec;
這仍然會自動為您清理內存,並使您能夠專注於編寫正確的算法,而不必花費大量時間來確保清理內存管理。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.