在范围内创建新对象并退出

时间:2016-04-08 10:09:30

标签: c++

如果在函数内创建任何类的对象并将其推入向量,当您退出该函数时对象会发生什么?它被摧毁了?如果是,为什么?它不应该因为我们有一个向量引用该对象将在稍后的代码中使用...

void class::foo(){
  //this class object has a private vector called 've'
  ve.push_back(aNotherClass(somearg));
  //watever
}//exit
void class::foo2(){
  aNotherClass an = ve.pop_back(); //example code not sure if it works.
  cout << an.getSomeAtrribute() << endl;
  //will print like 432042 something like this and I'm sure it is not that value. is it '->' or '.' ?
}

2 个答案:

答案 0 :(得分:2)

vector.push_back制作参数的副本。您创建的本地对象将被销毁,但该向量将保留一个副本。但是,如果该副本只是指针的副本,那么您就遇到了麻烦。

答案 1 :(得分:1)

在堆栈上创建的本地对象(不使用new运算符)将被销毁。它是语言规范。

从另一方面来说,矢量可以以创建自己的对象副本的方式实现。因此允许您在退出函数后保留数据事件。