C++ 如果我们在stl容器中传递用户定义的对象,那么对象销毁的顺序是什么?
为了检查stl容器中用户定义对象的销毁顺序,我测试了以下代码C++ 如果我们在stl容器中传递用户定义的对象,那么对象销毁的顺序是什么?,c++,vector,stl,C++,Vector,Stl,为了检查stl容器中用户定义对象的销毁顺序,我测试了以下代码 class A { public: static int i; const int j; A():j(++i) { cout<<"A::A() "<< j <<endl; } ~A() { cout<<"A::~A(): "<< j <<endl; } A
class A
{
public:
static int i;
const int j;
A():j(++i)
{
cout<<"A::A() "<< j <<endl;
}
~A()
{
cout<<"A::~A(): "<< j <<endl;
}
A(const A & obj):j(++i)
{
cout<<"copyconstro " << j <<endl;
}
};
int A::i = 0;
int main()
{
vector<A> obj;
A ab; //1
A ad;// 2
A c;//3
obj.push_back(ab); //4
vector<A> obj2;
obj2.push_back(c); //5
}
在查看输出后,我有点困惑
< ISO C++标准是否规定了STL容器内物体的任何破坏顺序?< /P> < P>破坏顺序是它们构造的颠倒顺序。在您的功能中,销毁顺序为: obj2 c ad ab obj obj2 C 公元 ab obj 当
obj2
被销毁时,它将销毁5
当c
被销毁时,它将销毁3
当ad
被销毁时,它将销毁2
当ab
被销毁时,它将销毁1
当
obj
被破坏时,它会破坏4。破坏的顺序与它们的构造顺序相反。在您的功能中,销毁顺序为:
obj2
c
ad
ab
obj
obj2
C
公元
ab
obj
当obj2
被销毁时,它将销毁5
当c
被销毁时,它将销毁3
当ad
被销毁时,它将销毁2
当ab
被销毁时,它将销毁1
当
obj
被解构时,它将解构4。您的代码没有说明“STL容器内对象的解构顺序”——每个容器只有一个元素。您正在观察函数局部变量的(创建和)销毁顺序:请注意,销毁顺序与构造顺序相反,具体来说,4的构造发生在定义了obj
时,而不是在ab
的副本被push_back
-ed到其中时,因此“4”最后被销毁
无论如何,要回答您的问题-不-标准没有指定元素销毁顺序。您的代码没有说明任何关于“STL容器内对象的销毁顺序”的内容-每个容器只有一个元素。您正在观察函数局部变量的(创建和)销毁顺序:请注意,销毁顺序与构造顺序相反,具体来说,4的构造发生在定义了
obj
时,而不是在ab
的副本被push_back
-ed到其中时,因此“4”最后被销毁
无论如何,要回答您的问题-不-标准没有规定元素销毁顺序。问题是关于STL容器内的对象销毁顺序,正如TonyD所指出的。问题是关于STL容器内的对象销毁顺序,正如TonyD所指出的。