C++中对象的构造与析构顺序

一、对象的构造顺序

对象的构造,先被创建的对象,先被构造,先调用其构造函数

class A {
private:int _a = 0;
public://构造函数A(int a = 0){_a = a;cout << "A(int a = 0)" << " " << _a << endl;}
};int main()
{A a1(1);A a2(2);return 0;
}

二、对象的析构顺序

1.先被销毁的对象,先调用析构函数

2.同一域内,后创建的对象先销毁

3.先销毁局部的静态对象,再销毁全局的对象

3.全局对象和静态对象最后销毁

如下代码,对象a1、a2依次创建;接着对象a3创建;由于func函数执行完毕后,函数栈帧即被销毁,所以对象a3立即被销毁,调用析构函数;接着静态对象a4创建;main函数执行完毕后,对象a1、a2是同一域内的,后创建的对象先销毁,所以对象a2先销毁,a1后销毁,a2、a1依次调用析构函数;最后静态对象a4被销毁,调用其析构函数。

class A {
private:int _a = 0;
public://构造函数A(int a = 0){_a = a;cout << "A(int a = 0)" << " " << _a << endl;}//析构函数~A(){cout << "~A()" << " " << _a << endl;}
};void func()
{A a3(3);
}int main()
{A a1(1);A a2(2);func();static A a4(4);return 0;
}

对象a3在局部域中,函数func执行完毕后,对象即被销毁,调用析构函数;对象a1和a2在main函数中,main函数中执行完毕后,对象a1和a2被销毁,但是后创建的对象a2先被销毁,先创建的a1后被销毁;接着只剩下静态对象a4、a5和全局对象a6,局部的静态对象a4先销毁;最后剩下静态对象a5和全局对象a6,后创建的a6先销毁,先创建的a5后销毁。所以最终的调用析构函数先后顺序是a3、a2、a1、a4、a6、a5

class A {
private:int _a = 0;public://构造函数A(int a = 0){_a = a;cout << "A(int a = 0)" << " " << _a << endl;}//析构函数~A(){cout << "~A()" << " " << _a << endl;}
};static A a5(5);
A a6(6);void func()
{A a3(3);static A a4(4);
}int main()
{A a1(1);A a2(2);func();return 0;
}
//3 2 1 4 6 5

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/471983.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【python--迭代生成器闭包面向对象继承多态】

&#x1f680; 作者 &#xff1a;“码上有前” &#x1f680; 文章简介 &#xff1a;深度学习 &#x1f680; 欢迎小伙伴们 点赞&#x1f44d;、收藏⭐、留言&#x1f4ac; python--迭代生成器闭包面向对象继承多态 往期内容1.迭代for...in字典的迭代列表迭代 生成器推导式的…

列表推导式与生成表达式的区别

列表推导式与生成式表达式的区别&#xff1a; 列表推导式 res[i for i in range(6)] print(res) 结果&#xff1a; [0, 1, 2, 3, 4, 5] 生成表达式&#xff1a; res(i for i in range(6)) print(res) 结果&#xff1a; <generator object <genexpr> at 0x0000013EAD0…

【医学图像分割 2024】VM-UNet

文章目录 【医学图像分割 2024】VM-UNet摘要1. 介绍2. 预备知识3. 方法3.1 VM-UNet3.2 VSS Block3.3 损失函数 4. 实验4.1 数据集4.2 实现细节4.3 主要结果4.4 消融实验 5. 结果 【医学图像分割 2024】VM-UNet 论文题目&#xff1a;VM-UNet Vision Mamba UNet for Medical Imag…

mysql数据库 mvcc

在看MVCC之前我们先补充些基础内容&#xff0c;首先来看下事务的ACID和数据的总体运行流程 数据库整体的使用流程: ACID流程图 mysql核心日志: 在MySQL数据库中有三个非常重要的日志binlog,undolog,redolog. mvcc概念介绍&#xff1a; MVCC&#xff08;Multi-Version Concurr…

蓝桥杯真题:距离和

import java.util.*; public class 距离和 {public static void main(String[] args){String st"LANQIAO";int ans0;char ch[]st.toCharArray();for(int i0;i<ch.length;i){for(int ji1;j<ch.length;j){ansMath.abs(ch[j]-ch[i]);}}System.out.println(ans);} …

OS内存管理

内存 定义 内存是计算机用于存储数据和程序的硬件设备&#xff0c;它允许计算机快速读取和写入数据。内存通常是临时存储&#xff0c;其内容在计算机关闭或断电时会丢失。内存可存放数据。程序执行前需要先放到内存中才能被CPU处理(缓和CPU与硬盘之间的速度矛盾)。 在多道程…

问题:在额定电压500V以下的电路中,使用的各种用电设备,一般称为(_ _ _)用电设备 #媒体#媒体#媒体

问题&#xff1a;在额定电压500V以下的电路中,使用的各种用电设备,一般称为&#xff08;_ _ _)用电设备 参考答案如图所示

【动态规划】【记忆化搜索】【状态压缩】1681. 最小不兼容性

作者推荐 【数位dp】【动态规划】【状态压缩】【推荐】1012. 至少有 1 位重复的数字 本文涉及知识点 动态规划汇总 状态压缩 记忆化搜索 1681. 最小不兼容性 给你一个整数数组 nums​​​ 和一个整数 k 。你需要将这个数组划分到 k 个相同大小的子集中&#xff0c;使得同一…

2024年广东省安全员C证第四批(专职安全生产管理人员)证模拟考试题库及广东省安全员C证第四批(专职安全生产管理人员)理论考试试题

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 2024年广东省安全员C证第四批&#xff08;专职安全生产管理人员&#xff09;证模拟考试题库及广东省安全员C证第四批&#xff08;专职安全生产管理人员&#xff09;理论考试试题是由安全生产模拟考试一点通提供&#…

H5 色彩流动炫酷引导页源码

H5 色彩流动炫酷引导页源码 源码介绍&#xff1a;一款H5色彩流动炫酷引导页源码 下载地址&#xff1a; https://www.changyouzuhao.cn/9961.html

并发编程(1)基础篇

1 概览 1.1 这门课讲什么 这门课中的【并发】一词涵盖了在 Java 平台上的 进程线程并发并行 以及 Java 并发工具、并发问题以及解决方案&#xff0c;同时也会讲解一些其它领域的并发 1.2 为什么学这么课 我工作中用不到并发啊&#xff1f; 那你还是没有接触到复杂项目. …

Redis 数据类型及其常用命令一(string、list、set、zset、hash)

1、简介 Redis 的常用数据类型有十种&#xff0c;分别为&#xff1a;string、list、set、zset、hash、geo、hyperloglog、bitmap、bitfield、stream。熟练使用各种数据类型&#xff0c;能够快速结合场景进行使用。 注&#xff1a;我们所说的数据类型是指 value 的数据类型&…