繁体   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