在c ++中在循环中创建新变量时更好

时间:2010-05-12 03:13:28

标签: c++ programming-languages

C ++在循环中使用std::map的最佳方法是什么?

  • 动态分配
  • stack allocated

代码:

for(int i=0;i<3;i++)
{
  std::map<int,int>* m = new std::map<int,int>;
  //or ...
  std::map<int,int> m;

}

2 个答案:

答案 0 :(得分:6)

这不是静态实例;静态实例将使用static关键字(并且每次循环时都不会创建新关键字。)

这是一个局部变量。

在C ++中,您应该始终优先使用局部变量而不是动态分配。如果你动态分配一个对象(使用new),那么你必须记住在完成它后删除它,你必须跳过很多环节以确保异常安全。

答案 1 :(得分:6)

除非您真的需要它,否则请避免使用new,即变量/结构的生命周期与任何调用范围无关。 (如果它“属于”调用函数,则按值返回。)

显然不是这种情况。第二个,更可取的例子叫做局部变量。

我会在

之间做出选择
for(int i=0;i<3;i++)
{
  std::map<int,int> m;
  …
}

std::map<int,int> m;
for(int i=0;i<3;i++)
{
  …
  m.clear();
}

当容器为std::vector时,通过重用已分配的内存,后者可能会表现得更好。使用map,区别仅在于样式。