2

默认情况下,程序运行良好,但我应该在 main() 中显式调用 h.clear(),还是在声明全局映射变量的情况下始终调用 clear()?

map <int , long long> h;
long long f(int n)
{
    .
    .
    .
}
int main()
{
    long long int t,n,x;
//Should I explicitly invoke h.clear() here?
}
4

3 回答 3

2

clear()不是要求你,但没有必要。析构函数将负责清理并在内部释放地图使用的内存。

如果您期望在退出时将被破坏的其他全局对象main取决于地图为空的事实,您应该只清除地图(这看起来是个坏主意,但谁知道......)

于 2013-05-28T09:46:09.613 回答
1

如果您的代码真的只是这样,那么地图将为空。

在更奇特的情况下,它可能是非空的,例如

map <int , long long> h;

int fetchSomeVar()
{
  h[ 0 ] = 0;
  return 0;
}

int someVar = fetchSomeVar();


int main()
{
  //...
}

其中 fetchSomeVar 将在 main 之前被调用并且碰巧修改了地图,但是应该避免这样的构造。

于 2013-05-28T09:47:11.493 回答
0

地图将被破坏,但要等到 main 完成后。如果其他全局变量的析构函数(应该在同一个翻译单元中)引用,是否clear()在末尾调用main只会影响您的程序。h

于 2013-05-28T09:46:06.220 回答