繁体   English   中英

C ++ - 超出范围和向量时被破坏的对象

[英]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的情况下使其工作吗?

  • push_back将对象的副本推送到向量
  • 对象实际上将被销毁,但副本将保留在向量中
  • 如果要在向量中推送对象的确切内容并使代码工作,请使用move contructor

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM