news 2026/4/23 8:56:13

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/4/23 8:52:31

YOLOv11 改进 - C2PSA | C2PSA融合DiffAttention差分注意力:轻量级差分计算实现高效特征降噪,提升模型抗干扰能力

前言 本文介绍了 DiffCLIP,一种将差分注意力机制集成到 CLIP 架构的视觉 - 语言模型,并将其应用于 YOLOv11。差分注意力机制通过计算两个互补注意力分布的差值,抵消无关信息干扰。单头差分注意力将 Q 和 K 拆分,分别计算注意力分布后做差值融合;多头差分注意力则每个头独…

作者头像 李华
网站建设 2026/4/23 8:14:02

体检报告查询进入AI时代:Open-AutoGLM究竟带来了哪些颠覆性变革?

第一章&#xff1a;体检报告查询进入AI时代&#xff1a;Open-AutoGLM的崛起随着人工智能技术在医疗健康领域的深度渗透&#xff0c;体检报告的智能解析正迎来革命性变革。传统依赖人工解读的模式逐渐被高效、精准的AI系统取代&#xff0c;而Open-AutoGLM作为新一代通用语言模型…

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

揭秘Open-AutoGLM智能纪要生成:如何5分钟自动生成高质量会议记录

第一章&#xff1a;揭秘Open-AutoGLM智能纪要生成&#xff1a;5分钟打造高质量会议记录在快节奏的现代办公环境中&#xff0c;高效、准确地生成会议纪要是提升团队协作效率的关键。Open-AutoGLM 作为一款基于大语言模型的开源工具&#xff0c;专为自动化会议纪要生成而设计&…

作者头像 李华
网站建设 2026/4/16 17:39:25

揭秘Open-AutoGLM待办同步黑科技:如何实现跨平台零延迟数据同步

第一章&#xff1a;揭秘Open-AutoGLM待办同步黑科技&#xff1a;跨平台零延迟的奥秘 在分布式任务管理场景中&#xff0c;Open-AutoGLM 凭借其创新的同步机制实现了跨平台待办事项的“零延迟”更新。这一能力背后融合了事件驱动架构、增量数据同步与智能冲突解决策略&#xff0…

作者头像 李华
网站建设 2026/4/18 13:02:48

(Open-AutoGLM部署避坑指南):新手最容易忽略的8个配置细节

第一章&#xff1a;Open-AutoGLM部署前的环境评估在部署 Open-AutoGLM 之前&#xff0c;全面的环境评估是确保系统稳定运行的关键步骤。该模型对计算资源、依赖库版本及操作系统兼容性有明确要求&#xff0c;需逐一验证以避免后续故障。硬件资源配置 Open-AutoGLM 推荐使用具备…

作者头像 李华
网站建设 2026/4/20 2:35:19

【Java毕设源码分享】基于springboot+vue的大学生成绩管理系统的设计与实现(程序+文档+代码讲解+一条龙定制)

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

作者头像 李华