1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > C++构造函数及析构函数的调用顺序

C++构造函数及析构函数的调用顺序

时间:2019-12-30 17:17:09

相关推荐

C++构造函数及析构函数的调用顺序

简单来说,其构造函数的顺序就一句话:

基类构造函数 -> 成员的构造函数 -> 构造函数体内语句

看下面一个代码示例:

#include <iostream>using namespace std;class A {public:A() {cout << "A()" << endl; }~A() {cout << "~A()" << endl; }};class B {public:B(int b) {cout << "B(" << b << ")" << endl; }~B() {cout << "~B()" << endl; }};class C {public:C(int c) {cout << "C(" << c << ")" << endl; }~C() {cout << "~C()" << endl; }};class D {public:D() {cout << "D()" << endl; }~D() {cout << "~D()" << endl; }};class E: public B, public A {public:D d;C c;E(): c(3), B(5) {cout << "E()" << endl; }~E() {cout << "~E()" << endl; }};int main(){E e;return 0;}

你能看出这份代码的输出吗?

依照上面提到的,首先应该执行的是基类的构造函数。不过 C++ 语言是支持多继承的,那么当某个类继承多个类时,其构造顺序又是怎样的呢?答案是:简单的依照继承的顺序构造。

接下来,就会执行其成员变量的构造函数,这个顺序也很简单,就是依照类代码中成员变量的顺序依次执行的。

最后才会执行构造函数中的具体代码。

注意,在上述过程中,执行的顺序与构造函数参数的顺序无关。

通过 new 创建一个对象会调用其构造函数,通过 delete 删除一个对象会调用其析构函数。

如果没有显示的使用 delete 删除一个对象的话,析构函数执行的顺序与构造函数的顺序相反。

所以,上述代码的输出就是:

B(5)A()D()C(3)E()~E()~C()~D()~A()~B()

原文链接:/archives/51/

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。