news 2026/6/12 17:49:01

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/6/6 12:49:11

Open-AutoGLM核心算法解析,掌握NLP在会议纪要中的4大应用场景

第一章&#xff1a;Open-AutoGLM会议纪要生成在现代团队协作中&#xff0c;高效生成会议纪要成为提升沟通效率的关键环节。Open-AutoGLM 是一个基于开源大语言模型的自动化会议纪要生成系统&#xff0c;能够对接主流音视频会议平台&#xff0c;实时转录并提炼会议核心内容。系统…

作者头像 李华
网站建设 2026/6/10 16:08:04

从手动提醒到全自动预警:Open-AutoGLM保险到期管理的4次技术跃迁

第一章&#xff1a;从手动提醒到全自动预警&#xff1a;Open-AutoGLM保险到期管理的演进之路在保险资产管理领域&#xff0c;保单到期提醒曾长期依赖人工台账与邮件通知&#xff0c;效率低且易出错。随着系统规模扩大&#xff0c;传统方式难以应对高频、多维度的监控需求。Open…

作者头像 李华
网站建设 2026/6/9 23:16:14

为什么你的任务总不同步?Open-AutoGLM同步失败的8个常见陷阱

第一章&#xff1a;Open-AutoGLM同步失败的根源剖析在大规模语言模型自动化部署场景中&#xff0c;Open-AutoGLM作为核心调度组件&#xff0c;其同步机制的稳定性直接影响系统整体可用性。当出现同步失败时&#xff0c;通常源于配置、网络或权限三类根本原因。配置文件校验缺失…

作者头像 李华
网站建设 2026/6/10 18:02:30

【AI办公革命】:Open-AutoGLM如何实现会议纪要零手动输入?

第一章&#xff1a;Open-AutoGLM 会议纪要生成Open-AutoGLM 是一个基于开源大语言模型的自动化会议纪要生成系统&#xff0c;专为提升会议信息提取与结构化处理效率而设计。该系统融合语音识别、自然语言理解与文本摘要技术&#xff0c;能够从多源会议记录中自动生成清晰、准确…

作者头像 李华
网站建设 2026/6/11 23:43:26

从0到上线:中小企业如何用Open-AutoGLM搭建专属证件照服务平台

第一章&#xff1a;从0到上线&#xff1a;中小企业如何用Open-AutoGLM搭建专属证件照服务平台在数字化办公与远程服务快速发展的背景下&#xff0c;中小企业亟需低成本、高效率的自动化工具来提升服务能力。Open-AutoGLM 作为一款开源的多模态生成与推理框架&#xff0c;结合了…

作者头像 李华
网站建设 2026/6/11 18:40:54

Open-AutoGLM接入难题一网打尽(3大常见错误+7种解决方案)

第一章&#xff1a;Open-AutoGLM 加油站点查询在智能出行与车联网快速发展的背景下&#xff0c;实时、精准的加油站点查询服务成为车载系统和导航应用的核心功能之一。Open-AutoGLM 是一个面向汽车场景的大语言模型开放平台&#xff0c;其提供的加油站点查询接口能够结合自然语…

作者头像 李华