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