删除指针向量
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();
编辑:
你能颠倒函数调用与插入向量的顺序吗?例如,你能做到这一点吗?
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;
这仍然会自动为您清理内存,使您能够专注于编写正确的算法,而不是花费大量时间确保清理内存管理。
使用 std::unique_ptr
.当您的矢量超出范围时,每个float
都将被破坏,而无需您进行额外的工作。
std::vector<std::unique_ptr<float>> vec
如果你真的只是想要一个float
数组的容器,请参阅标记B的答案并改用std::vector<std::vector<float>>
。
相关文章:
- 函数向量_指针有不同的原型,我可以构建一个吗
- 有没有一种"cleaner"的方法可以在指向基的指针向量中找到派生类的第一个实例?
- 使用向量类的c++指针
- 如何使用C++初始化向量;脚本化值不是数组、指针或矢量错误
- 如何更改唯一指针向量的可见性
- C++ 独特指针练习的向量
- C 中的向量指针的清晰图
- 当向量位于内部类中时,如何删除指向对象的向量指针
- std::向量指针
- 指向结构体的向量指针错误
- 删除指向指针的向量指针时出错
- 映射不同类型的向量指针
- 在c++中传递向量指针
- 虚拟类的向量:指针是干净的方法吗
- 如何从另一个向量/对象集构造新的向量/指针集
- 模型视图控制器- c++向量指针,太多的传递
- 为什么向量指针占用这么多内存?
- 删除条目向量指针的静态映射c++
- 复向量指针
- c++数组向量指针的初始化