关心各个对象构造函数,析构函数执行的次序
与在类中声明的次序有关,跟initializer list中的次序无关
以在类B中说明的顺序调用子对象的构造函数,然后才是B的构造函数
先是B的析构函数 然后以B中说明的相反次序调用子对象的析构函数
#include <iostream>
class A{
int m_a;
public:
A(){
m_a=1;
std::cout<<"A constructor working..."<<std::endl;
}
A(int i){
m_a=i;
std::cout<<"A constructor working..."<<std::endl;
}
~A(){
std::cout<<"A destructor working..."<<std::endl;
}
void dis(){
std::cout<<"m_a="<<m_a<<std::endl;
}
};
class C{
int m_c;
public:
C(){
m_c=1;
std::cout<<"C constructor working..."<<std::endl;
}
C(int i){
m_c=i;
std::cout<<"C constructor working..."<<std::endl;
}
~C(){
std::cout<<"C destructor working...

本文探讨了C++中子对象构造函数和析构函数的调用顺序,强调次序与在类中声明的顺序相关,而非初始化列表的顺序。在类B的实例化过程中,首先按声明顺序调用子对象的构造函数,接着执行B的构造函数;而在析构过程中,先执行B的析构函数,随后按照相反的顺序调用子对象的析构函数。
最低0.47元/天 解锁文章
323

被折叠的 条评论
为什么被折叠?



