构造函数与析构函数的执行顺序

对象作为成员变量的构造函数与析构函数

当一个类包含另一个类的对象作为成员时,这些成员对象的构造函数会在包含它们的对象的构造函数之前被调用,而它们的析构函数则会在包含它们的对象的析构函数之后被调用。成员对象的构造函数和析构函数的调用顺序与它们在类定义中出现的顺序相同。

class MemberClass {  
public:  
    MemberClass() { std::cout << "MemberClass Constructor\n"; }  
    ~MemberClass() { std::cout << "MemberClass Destructor\n"; }  
};  
  
class ContainingClass {  
    MemberClass member;  
public:  
    ContainingClass() { std::cout << "ContainingClass Constructor\n"; }  
    ~ContainingClass() { std::cout << "ContainingClass Destructor\n"; }  
};  
  
int main() {  
    ContainingClass obj; // MemberClass 的构造函数先被调用,然后是 ContainingClass 的构造函数  
    // ... 在这里,obj 对象可以使用 ...  
    // 当 main 函数返回时,obj 超出作用域  
    // ContainingClass 的析构函数先被调用,然后是 MemberClass 的析构函数  
    return 0;  
}

结果:构造的时候先搬床再封门,析构的时候先拆门在搬床

MemberClass Constructor
ContainingClass Constructor
ContainingClass Destructor
MemberClass Destructor

类继承执行顺序

#include <iostream>  
  
class Base {  
public:  
    Base() { std::cout << "Base Constructor\n"; }  
    ~Base() { std::cout << "Base Destructor\n"; }  
};  
  
class Derived : public Base {  
public:  
    Derived() { std::cout << "Derived Constructor\n"; }  
    ~Derived() { std::cout << "Derived Destructor\n"; }  
};  
  
int main() {  
    Derived d;  
    // 当d离开作用域时,析构函数会被自动调用  
    // 输出顺序将是:Derived Destructor, Base Destructor  
    return 0;  
}

结果:构造的时候搞base地基在建立房子,先抽象在具体,析构的时候反过来

Base Constructor
Derived Constructor
Derived Destructor
Base Destructor

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值