安全地将新项目实例添加到std :: vector中

时间:2017-01-10 10:02:24

标签: c++ vector memory-leaks

这是一个愚蠢的问题,但我有一个形而上学的疑问,这就是我需要问的原因。

当将对象推回向量时,假设我不需要事先更新对象,我可以避免使用局部变量吗?

void addToVector(std::vector<Foo>& fooVector)
{
    // Solution #1
    Foo foo;
    fooVector.push_back(foo);
    // Solution #2
    fooVector.push_back(Foo());
}

解决方案#2 是否会泄漏内存,知道没有局部变量超出范围封装Foo?

假设解决方案#2 有效,它是否比解决方案#1 更有效? (emplace_back可能是,但我仍然坚持使用c ++ 03)

1 个答案:

答案 0 :(得分:2)

push_back将项目复制到向量中,因此您可以说emplace_back效率最高。

您对临时Foo()的使用不会泄漏。