c++中对map变量调用clear()函数的要求

Requirement of invoking the clear() function on map variable in C++

本文关键字:函数 clear 中对 map 变量 调用 c++      更新时间:2023-10-16

默认情况下程序运行良好,但是我应该显式地调用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?
}

没有为您调用clear(),但是没有必要调用。析构函数将负责清理并释放map内部使用的内存。

你应该只清除映射,如果你期望其他全局对象将在退出main时销毁依赖于映射为空的事实(这看起来像一个坏主意,但谁知道…)

如果您的代码确实是这样的,那么映射将为空。

在更特殊的情况下可以是非空的,比如

map <int , long long> h;
int fetchSomeVar()
{
  h[ 0 ] = 0;
  return 0;
}
int someVar = fetchSomeVar();

int main()
{
  //...
}

其中fetchSomeVar将在main之前调用,并且恰好修改map,但是应该避免这样的构造

地图将被销毁,但直到main完成后才会被销毁。只有当h被其他全局变量的析构函数引用时(它们应该在同一个翻译单元中),在main的末尾调用clear()才会影响你的程序。