在我的班上,我有一个成员
std::vector<std::pair<std::string, std::string> > mEnvironment;
现在我编写了一个函数,它将这个向量与进程环境一起加载为键/值对。我不需要访问成员,所以我不使用地图,并且认为向量会更好,因为我只迭代它。
void Environment::setEnvironment(char const *oEnvironment[])
{
mEnvironment.clear();
if(oEnvironment == NULL)
return;
std::string name;
std::string value;
std::pair<std::string, std::string> entry;
for(const char **envp = oEnvironment; *envp != NULL; envp++)
{
const char *env = *envp;
name.clear();
value.clear();
for(env = *envp; *env != 0; env++)
{
if(*env == '=')
{
env++;
break;
}
name += *env;
}
value = env;
entry = std::make_pair(name, value);
mEnvironment.push_back(entry);
}
}
由于变量entry
是本地变量,我想知道push_back(entry)
当函数超出范围时会发生什么。我放入向量中的对象会持续存在,还是会调用析构函数?或者更糟糕的是,它会被简单地覆盖还是我必须在循环中创建一个新的 pair 对象?