当前位置: 首页 > article >正文

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

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

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

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


http://www.kler.cn/a/304002.html

相关文章:

  • 软件测试:测试用例详解
  • 【插件】多断言 插件pytest-assume
  • AutoCad 无界面开发
  • 普通电脑上安装属于自己的Llama 3 大模型和对话客户端
  • 《情商》提升:增强自我意识,学会与情绪共处
  • Python多进程间通讯(包含共享内存方式)
  • 多个系统运维压力大?统一运维管理为IT轻松解忧
  • 计算机网络八股总结
  • 使用vscode上传git远程仓库流程(Gitee)
  • uniapp点击跳转到对应位置
  • 写在OceanBase开源三周年
  • [项目][WebServer][日志设计]详细讲解
  • 【JVM 工具命令】JAVA程序线上问题诊断,JVM工具命令的使用,jstat, jstack,jmap命令的使用
  • 【机器学习】使用Numpy实现神经网络训练全流程
  • 关于若依flowable的安装
  • 76-mysql的聚集索引和非聚集索引区别
  • 为什么网站加载速度总是那么不尽如人意呢?(网站优化篇)
  • 2024.9.14(RC和RS)
  • Docker操作MySQL
  • 互联网环境下CentOS7部署K8S
  • LNMP的简单安装(ubuntu)
  • Artec Leo协助定制维修管道,让石油和天然气炼油厂不停产
  • vue3开发uniapp转字节小程序注意事项
  • 《C++PrimerPlus》第10章:类和对象
  • go语言开发windows抓包工具
  • 在centos上搭建syslog服务端