【发布时间】: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