您的位置:首页 > 编程语言 > C语言/C++

构造函数和析构函数的调用问题

2015-05-27 15:26 239 查看
构造函数和析构函数的调用问题

# include <iostream>
using namespace std;
class A
{
public:
A() { cout<<"create A"<<endl; }
A(const A& other){ cout<<"copy A"<<endl;} //复制构造函数
~A() { cout<<"~A"<<endl; }
};
class C
{
public:
C() { cout<<"create C"<<endl; }
C(const A& other){ cout<<"copy C"<<endl;} //复制构造函数
~C() { cout<<"~C"<<endl; }
};
class B:public A
{
public:
B()
{
cout<<"create B"<<endl;
}
~B()
{
cout<<"~B"<<endl;
}
private:
C _a;
};

int main(void)
{
B b;
cout<<"------------------------"<<endl;
}


结果为:
create A
create C
create B
------------------------
~B
~C
~A

我们可以看到,这个地方先是调用parent class的构造函数,然后对成员变量C类型的构造函数,然后再最后执行B类型的构造函数。

析构的过程就是上面的过程反过来。

所以Aesthetic92的解释有一部分不是很准确。我认为。

更加准确的说明应该是,

最开始析构b,~B,这个是没有争议的。

接着是析构b的成员变量_a,所以是~A

接着是b的parent class(基类)的~A

最后才是a的析构~A
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  C++