c++ - 删除指针 vector

标签 c++ vector

假设我有一个这样的 vector

std::vector<float*> vec;

现在我知道我需要删除 vector 中的指针来回收内存。我知道的方法是遍历 vector 并删除每个指针。我想知道是否有更快的方法来完成此任务。

我有以下场景

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

最佳答案

编辑:

你能通过颠倒函数调用和插入 vector 的顺序而逃脱吗?例如,你能做到吗?

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

原答案:

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

现在,如果您的 float*指向一个array 的 float ,还是不要那样做。而是使用 vector 的 vector :

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

这仍然会自动为您清理内存,使您能够专注于编写正确的算法,而不是花费大量时间确保清理内存管理。

关于c++ - 删除指针 vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18898385/

相关文章:

c++ - 无法打开包含文件

c++ - 放松内存排序时,C++延迟会增加

javascript - Openlayers 3 geojson 与矢量源

c++ - 巨大的 std::vector<std::vector> 不会在销毁时释放所有内存

c++ - 在 C++ 中获取 Vector 的一部分,例如指向 C 数组中间的指针

c++ - 将数组传递给gtest中的参数化测试

c++ - 获得std::set中间(中位数)的有效方法?

c++ - Qt 如何向服务器发送 https 请求?

c++ - 需要改变的东西

c++ - C++ 字符串和字符串 vector 的 C 实现