构造函数和析构函数调用的顺序

发布网友

我来回答

3个回答

热心网友

继承关系的构造函数和析构函数的执行顺序为:

1、父类构造函数执行。

2、子类构造函数执行。

3、子类析构函数执行。

4、父类析构函数执行。

组合关系的构造函数和析构函数执行顺序为:

1、执行类成员对象的构造函数。

2、执行类自己的构造函数。

3、执行类自己的析构函数。

4、执行类成员的析构函数。

container有两个成员,one,two,所以在执行这个container构造函数之前执行object类的构造函数两次。

扩展资料:

把类的声明放在main函数之前,它的作用域是全局的。这样做可以使main函数更简练一些。在main函数中定义了两个对象并且给出了初值,然后输出两个学生的数据。

当主函数结束时调用析构函数,输出stud has been destructe!。值得注意的是,真正实用的析构函数一般是不含有输出信息的。

在本程序中,成员函数是在类中定义的,如果成员函数的数目很多以及函数的长度很长,类的声明就会占很大的篇幅,不利于阅读程序。

而且为了隐藏实现,一般是有必要将类的声明和实现(具体方法代码)分开编写的,这也是一个良好的编程习惯。即可以在类的外面定义成员函数,而在类中只用函数的原型作声明。

参考资料来源:百度百科-析构函数



热心网友

在使用构造函数和析构函数时,需要特别注意对它们的调用时间和调用顺序。在一般情况下,调用析构函数的次序正好与调用构造函数的次序相反:最先被调用的构造函数,其对应的(同一对象中的)析构函数最后被调用,而最后被调用的构造函数,其对应的析构函数最先被调用。
可以简记为:先构造的后析构,后构造的先析构,它相当于一个栈,先进后出。

下面归纳一下什么时候调用构造函数和析构函数:
1) 在全局范围中定义的对象(即在所有函数之外定义的对象),它的构造函数在文件中的所有函数(包括main函数)执行之前调用。但如果一个程序中有多个文件,而不同的文件中都定义了全局对象,则这些对象的构造函数的执行顺序是不确定的。当main函数执行完毕或调用exit函数时(此时程序终止),调用析构函数。

2) 如果定义的是局部自动对象(例如在函数中定义对象),则在建立对象时调用其构造函数。如果函数被多次调用,则在每次建立对象时都要调用构造函数。在函数调用结束、对象释放时先调用析构函数。

3) 如果在函数中定义静态(static )局部对象,则只在程序第一次调用此函数建立对象时调用构造函数一次,在调用结束时对象并不释放,因此也不调用析构函数,只在main函数结束或调用exit函数结束程序时,才调用析构函数。

热心网友

Test obj1,obj2;//当你定义两个对象时候,自动调用构造函数,也就是你看到的,有两个构造函数的打印
obj1.print();//不解释了
obj2.print();//不解释了
//当该定义的对象的作用域过去(生命周期)结束,系统自动调用析构函数进行释放
因此obj1,obj2在main结束时候又被释放掉了追问那为什么不是
构造函数被执行
x=0

构造函数被执行
x=0
析构函数被执行
析构函数被执行

追答很好理解啊,因为程序是按顺序执行
先声明了两个对象
Test obj1,obj2;
两个变量创建的时候,构造函数就已经被调用了
还没到打印那个位置

析构函数也是一样,程序都执行结束了,它是函数返回前最后被执行的

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com