簡體   English   中英

刪除指針向量

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM