[英]C++ - Object destructed when out of scope and in vector
为什么对象的析构函数在超出范围时以及何时在向量中时被调用? 例如 :
std::vector<Foo> vec;
for (i=10; i<10; i++)
{
Foo object(i);
vec.push_back(object);
}
是否调用了对象的析构函数,因为它每次都超出范围? 我可以在没有指针或shared_pointers的情况下使其工作吗?
object
将死于此范围,这是正确的。 不, vector
不会也不会影响其寿命。 push_back
实际上将object
复制到vector
。 为避免这种情况,您可以使用C ++ 11的emplace_back
,它允许就地构造Foo
:
vec.emplace_back(i);
该测试程序确认不执行复制,移动或额外破坏。
Constructing A
End of vec's scope
Destructing A
这应该工作
std::vector<Foo> vec;
for (i=10; i<10; i++)
{
vec.emplace_back(i);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.