删除指针向量

时间:2013-09-19 15:07:21

标签: c++ vector

假设我有一个载体

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();

2 个答案:

答案 0 :(得分:3)

使用std::unique_ptr。当你的向量超出范围时,每个float都将被破坏,而你无需额外的工作。

std::vector<std::unique_ptr<float>> vec

如果您真的只想要一个float数组的容器,请参阅Mark B's answer并改用std::vector<std::vector<float>>

答案 1 :(得分:3)

编辑:

你可以通过颠倒函数调用与插入到向量的顺序来逃避吗?例如,你可以这样做吗?

    float a = column_cell_mapper[SelectedColumns[i]]->text().toFloat();
    someclass.somemethod(a) // Requires a reference
    cont.push_back(a);

原始答案:

只是不要通过指针存储浮点数而是使用std::vector<float>。对于像浮动这样的小型简单类型,使用额外的间接级别并不能为您带来任何好处。如果你真的真的需要通过指针存储单独的浮点数,你可以使用std::unique_ptr和C ++ 11或boost::shared_ptr和以前的C ++版本。

现在,如果您的float*指向浮动的数组,那么仍然不这样做。而是使用矢量矢量:

std::vector<std::vector<float> > vec;

这仍然会自动为您清理内存,让您专注于编写正确的算法,而不是花太多时间来确保清理内存管理。