我在main中有五个用户定义的对象,如下所示:
他们的析构函数是否有任何特定的顺序被调用?比如说定义的顺序如下:
Student s1;
Student s2;
Student s3;
Student s4;
Student s5;
s5的析构函数是先被调用还是s1'
答案 0 :(得分:5)
将按照s5
,s4
,s3
,s2
,s1
的顺序调用析构函数。这是一般规则:如果两个对象的生命周期重叠,那么要构造的第一个将是最后一个被自动销毁的对象。当然,这不适用于动态存储持续时间的对象,这些对象不会自动销毁。 (例如,<{em>}使用new
创建的对象在您拨打delete
时会被销毁。)
答案 1 :(得分:1)
是的,破坏的顺序总是与施工顺序相反。
请查看以下代码。
class Base
{
public:
Base ( )
{
cout << "Inside Base constructor" << endl;
}
~Base ( )
{
cout << "Inside Base destructor" << endl;
}
};
class Derived : public Base
{
public:
Derived ( )
{
cout << "Inside Derived constructor" << endl;
}
~Derived ( )
{
cout << "Inside Derived destructor" << endl;
}
};
void main( )
{
Derived x;
}
如果您运行此代码,您将获得以下输出。
Inside Base constructor
Inside Derived constructor
Inside Derived destructor
Inside Base destructor