为什么对象的析构函数在超出范围时以及何时在向量中时被调用? 例如:
std::vector<Foo> vec;
for (i=10; i<10; i++)
{
Foo object(i);
vec.push_back(object);
}
对象的析构函数是否被调用,因为它每次都超出范围?我可以在没有指针或shared_pointers的情况下使其工作吗?
答案 0 :(得分:3)
答案 1 :(得分:0)
object
将死于此范围,这是正确的。不,vector
不会影响其生命周期。 push_back
实际上将object
复制到vector
。为避免这种情况,您可以使用C ++ 11 emplace_back
,它允许就地构建Foo
:
vec.emplace_back(i);
manual installation guide确认没有执行复制,移动或额外破坏。
Constructing A
End of vec's scope
Destructing A
答案 2 :(得分:0)
这应该有效
std::vector<Foo> vec;
for (i=10; i<10; i++)
{
vec.emplace_back(i);
}