【问题标题】:Safely add a new item instance into an std::vector [duplicate]安全地将新项目实例添加到 std::vector [重复]
【发布时间】:2017-05-24 18:45:54
【问题描述】:

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

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

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

解决方案 #2 会在知道没有局部变量超出范围封装 Foo 的情况下泄漏内存吗?

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

【问题讨论】:

  • 一般来说,它们是等价的。第一个构造一个命名变量,该变量被复制到向量中,并在超出范围时销毁。第二个构造是未命名的临时构造,它被复制到向量中,并在语句结束时销毁。
  • 完美答案,谢谢

标签: c++ vector memory-leaks


【解决方案1】:

push_back 将项目复制到向量中,因此如您所说,emplace_back 将是最有效的。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-01-27
    • 2023-03-15
    • 1970-01-01
    • 2016-01-23
    • 1970-01-01
    • 2014-07-25
    • 1970-01-01
    • 2020-12-26
    相关资源
    最近更新 更多