news 2026/8/21 3:45:04

C++类的构造顺序

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
C++类的构造顺序

1. C++ 类成员与自身的构造和析构顺序

  1. 默认先构造类成员(类成员的构造顺序就是类成员在类中被书写的顺序),然后再构造类本身。参看 “测试代码 1”。
  2. 默认先析构类本身,然后再析构类成员(类成员的析构顺序就是类成员在类中被书写顺序的反顺序)。参看 “测试代码 1”。
  3. 如果类成员在类的构造函数中才被初始化,那么就是先调用类自身的构造函数,然后再按类成员在构造函数中的初始化顺序依次构造类成员。但是析构顺序总是先析构类本身,然后再析构类成员(类成员的析构顺序就是类成员在类中被书写顺序的反顺序)。参看 “测试代码 2”。
  4. 可以使用智能指针,并在类的析构函数中调用智能指针的reset函数显式更改类成员之间的析构顺序,以及类成员和类本身的析构顺序。参看 “测试代码 3”。

1.1. 测试代码 1

#include<iostream>usingnamespacestd;classA{public:A(){cout<<"constructor A"<<endl;}~A(){cout<<"destructor A"<<endl;}};classB{public:B(){cout<<"constructor B"<<endl;}~B(){cout<<"destructor B"<<endl;}};classC{public:C(){cout<<"constructor C"<<endl;}~C(){cout<<"destructor C"<<endl;}private:A a;B b;};intmain(){C c;return0;}

输出:

constructor A constructor B constructor C destructor C destructor B destructor A

1.2. 测试代码 2

#include<iostream>#include<memory>#include<utility>usingnamespacestd;classA{public:A(){cout<<"constructor A"<<endl;}~A(){cout<<"destructor A"<<endl;}};classB{public:B(){cout<<"constructor B"<<endl;}~B(){cout<<"destructor B"<<endl;}};classC{public:C(){cout<<"constructor C"<<endl;b=std::make_unique<B>();a=std::make_unique<A>();}~C(){cout<<"destructor C"<<endl;}private:A a1;unique_ptr<A>a;unique_ptr<B>b;};intmain(){unique_ptr<C>c=std::make_unique<C>();return0;}

输出:

constructor A constructor C constructor B constructor A destructor C destructor B destructor A destructor A

1.3. 测试代码 3

#include<iostream>#include<memory>#include<utility>usingnamespacestd;classA{public:A(){cout<<"constructor A"<<endl;}~A(){cout<<"destructor A"<<endl;}};classB{public:B(){cout<<"constructor B"<<endl;}~B(){cout<<"destructor B"<<endl;}};classC{public:C(){cout<<"constructor C"<<endl;a=std::make_unique<A>();b=std::make_unique<B>();}~C(){cout<<"destructor C"<<endl;a.reset();b.reset();}private:unique_ptr<A>a;unique_ptr<B>b;};intmain(){unique_ptr<C>c=std::make_unique<C>();return0;}

输出:

constructor C constructor A constructor B destructor C destructor A destructor B

2. C++ 父类和子类的构造和析构顺序

对象在创建时构造函数的调用顺序:

  1. 调用父类的构造函数;
  2. 调用成员变量的构造函数;
  3. 调用类自身的构造函数。

子类对象析构时的顺序(析构函数的调用顺序与构造函数相反):
2. 执行自身的析构函数;
3. 执行成员变量的析构函数;
4. 执行父类的析构函数。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/21 8:32:46

Open-AutoGLM时间建模技术揭秘:让AI比你更懂你的身体节律

第一章&#xff1a;Open-AutoGLM时间建模技术揭秘&#xff1a;让AI比你更懂你的身体节律现代人工智能正逐步从“通用响应”迈向“个性化感知”&#xff0c;而Open-AutoGLM的出现&#xff0c;正是这一跃迁的关键。该技术通过深度时间序列建模&#xff0c;捕捉用户生理信号、行为…

作者头像 李华
网站建设 2026/8/19 12:06:00

从0到1搭建智能挂号系统(基于Open-AutoGLM的完整实践指南)

第一章&#xff1a;从0到1搭建智能挂号系统&#xff08;基于Open-AutoGLM的完整实践指南&#xff09;构建一个高效、智能的在线挂号系统是现代医疗信息化的关键一步。本章将指导你如何利用开源大模型框架 Open-AutoGLM 实现自然语言理解驱动的挂号流程&#xff0c;从环境搭建到…

作者头像 李华
网站建设 2026/8/20 19:04:25

为什么顶级医院都在测试Open-AutoGLM的用药提醒功能?

第一章&#xff1a;为什么顶级医院都在测试Open-AutoGLM的用药提醒功能近年来&#xff0c;多家顶尖医疗机构开始试点部署Open-AutoGLM系统中的智能用药提醒模块。这一功能基于大语言模型与临床知识图谱深度融合&#xff0c;能够实时分析患者电子病历、处方记录和药物相互作用数…

作者头像 李华
网站建设 2026/8/20 16:09:19

【Open-AutoGLM证件照黑科技】:3步实现全自动合规拍摄,效率提升90%

第一章&#xff1a;Open-AutoGLM证件照黑科技概述Open-AutoGLM 是一款基于开源大模型与自动化图像生成技术深度融合的创新工具&#xff0c;专为高效生成符合规范的证件照而设计。它结合了自然语言理解、人脸关键点检测、背景智能分割与色彩校正等多项AI能力&#xff0c;实现了从…

作者头像 李华
网站建设 2026/8/21 11:50:59

Open-AutoGLM真的能根治“号贩子”问题吗:一线医院实测数据曝光

第一章&#xff1a;Open-AutoGLM真的能根治“号贩子”问题吗&#xff1a;一线医院实测数据曝光近年来&#xff0c;挂号难、号贩子泛滥成为困扰国内大型公立医院的顽疾。为应对这一挑战&#xff0c;北京协和医院率先试点部署基于开源大模型的智能调度系统——Open-AutoGLM&#…

作者头像 李华