C++ 在作用域内创建新对象并退出时会发生什么

C++ 在作用域内创建新对象并退出时会发生什么,c++,C++,如果在函数中创建任何类的对象并将其推入向量,当退出该函数时,该对象会发生什么情况?它被摧毁了?如果是,为什么?它不应该这样,因为我们有一个向量引用这个对象,稍后将在代码中使用 void class::foo(){ //this class object has a private vector called 've' ve.push_back(aNotherClass(somearg)); //watever }//exit void class::foo2(){ aNother

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

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 '.' ?
}
void类::foo(){
//该类对象有一个名为“ve”的私有向量
ve.向后推(另一个类(somearg));
//瓦瑟夫
}//出口
void类::foo2(){
aNotherClass an=ve.pop_back();//示例代码不确定它是否有效。

cout在堆栈上创建的本地对象(不使用新运算符)将被销毁。这是语言规范。从另一方面来说,向量可以通过创建自己的对象副本的方式来实现。因此,允许您在退出函数后保留数据事件。

在堆栈上创建的本地对象(不使用新运算符)将被销毁。这是语言规范。从另一方面来说,向量可以通过创建自己的对象副本的方式来实现。这样,您就可以在退出函数后保留数据事件。

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

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

您不这么说吗如何声明
ve
——假设它是一个成员变量,然后确保它不会被破坏向量中的对象不是传递给
push_back
的同一个对象,而
pop_back
的结果也不是向量中的同一个对象。如果你习惯了C#或Java,你应该忘记你所知道的一切关于“参考资料”.我习惯于C#及其垃圾收集器。正如Michael所说,如果我使用“new”,我需要调用delete。这里需要的是“new”。将指针指向在堆栈外部创建的新对象的向量。您不需要说明如何声明
ve
-假设它是成员变量,那么确保它不会被销毁向量中的对象不会被销毁传递给
push_back
的同一对象,以及
pop_back
的结果与向量中的对象不同。如果您习惯于C#或Java,您应该忘记所有关于“引用”的知识.我习惯了C#及其垃圾收集器。正如Michael所说,如果我使用“new”,我需要调用delete。这里需要的是“new”。将指针放在堆栈外部创建的新对象的向量上。如果我在向量中引用类的类型是指针,它就会起作用。因此,当我执行someclass*C=new someclass(args);我正在堆栈外创建此对象?是的,“新建”创建的对象将一直存在,直到调用“删除”或进程显式销毁为止ends@int3通过使用参数
args
new
调用其构造函数,在堆上创建
someclass
的对象,然后返回此指针>someclass
对象位于堆上;指向该对象的指针位于堆栈上。指针将在作用域末尾被销毁,但对象不会。如果我在向量中引用类型为指针的类,则该方法有效。因此,当我执行someclass*c=新建someclass(args)时;我正在堆栈外创建此对象?是的,“新建”创建的对象将一直存在,直到调用“删除”或进程显式销毁为止ends@int3通过使用参数
args
new
调用其构造函数,在堆上创建
someclass
的对象,然后返回此指针>someclass对象位于堆上;指向该对象的指针位于堆栈上。指针将在作用域结束时被销毁,但对象不会被销毁。