C++ 如果我们在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

为了检查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(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所指出的。