C++中的生命周期

2023-11-08

类A,含构造函数和析构函数
普通函数fun,函数体里新建了类A的局部自动对象FunObj和局部静态对象InStaObj
main方法新建了类A的局部自动对象MainObj,调用fun方法
外面新建了A的的外部静态对象ExStaObj和外部对象GblObj
[cpp] view plain copy
 
#include <iostream>  
#include <string.h>  
using namespace std;  
class A {  
  char string[50];  
public :  
  A(char * st);  
  ~A( );  
};  
   
A::A(char * st)  
{   
   strcpy(string, st);  
   cout << string << "被创建时调用构造函数 ! " << endl;  
}  
A::~A( )  
{    
    cout << string <<   
    "被撤消时调用析构函数 ! " << endl;  
}  
   
   
void fun( )  
{   
    cout << "在fun( )函数体内 : \n" << endl;   
    A FunObj("fun( )函数体内的自动对象FunObj");  
                 
    static A InStaObj("内部静态对象InStaObj");  
}  
   
int main( )  
{   
    A MainObj("主函数体内的自动对象MainObj");  
    cout<<"主函数体内,调用fun()函数前: \n";  
    fun( );  
    cout << "\n主函数体内,调用fun()函数后:\n";  
    return 0;  
}  
   
static A ExStaObj("外部静态对象ExStaObj");  
A GblObj("外部对象GblObj");  
输出:

若将A GblObj("外部对象GblObj"); 写在static A ExStaObj("外部静态对象ExStaObj");前面,则输出时两者顺序也颠倒。

分析

创建顺序
外部静态对象or外部对象优先于main函数
销毁顺序
和创建顺序相反,注意静态对象会在main函数执行完才会销毁
内存的三种分配方式

从静态存储区分配:此时的内存在程序编译的时候已经分配好,并且在程序的整个运行期间都存在。全局变量,static变量等在此存储
在栈区分配:相关代码执行时创建,执行结束时被自动释放。局部变量在此存储。栈内存分配运算内置于处理器的指令集中,效率高,但容量有限
在堆区分配:动态分配内存。用new/malloc时开辟,delete/free时释放。生存期由用户指定,灵活。但有内存泄露等问题

https://blog.csdn.net/PirLCK/article/details/52312911

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++中的生命周期 的相关文章

随机推荐

  • 超详细Shell学习教程第四篇shell脚本参数化

    目录 1 1参数化实例 1 2参数处理说明 1 3带返回值的参数 书写带参数的shell脚本 1 1参数化实例 创建bash1 sh bin bash echo Shell 传递参数实例 echo 第一个参数为 1 echo 参数个数为 e
  • 学习swoole框架需要杀掉9501进程,强制的解决办法

    1 查看进程 我们运行一下命令 netstat anp grep 9501 2 看出进程29698占用的9501端口 3 强制杀死进程 kill 9 29698 强制
  • python自动化(三):selenium微博抢票(含抢票程序设计思路)

    缘起 这个故事起源于女票是一个bjd娃圈爱好者 我才知道在娃圈里经常通过微博私信的方式进行一些商品的交易 例如娃娃的面妆 衣服和娃娃本身 这就引发了抢票需求 流程 在某一个整的时间点进行微信的私信发送 排名靠前者获得 人工操作反应慢 只能提
  • 不卸载重装,直接升级TeX Live的方法(Win11)

    不卸载重装 直接升级TeX Live的方法 Win11 1 前言 前两天想要用LaTeX写中文文档 更新ctex宏包的时候想起来已经好久没有更新TeX Live版本 上网查了下 TeX Live的2022版本已经可以使用 觉得可以在写文档的
  • JVM知识总结

    第一章 书籍推荐与JVM相关面试题 1 面试题 https blog csdn net Y0Q2T57s article details 80682013 commentBox https blog csdn net Javazhoumou
  • Unity 使用VRTK获取射线检测碰触的物体信息

    steam VR 版本 SteamVR plugin for Unity v1 2 3 VRTK版本 VRTK Virtual Reality Toolkit VR Toolkit 3 3 0 检测三维物体 1 创建脚本 并获取VRTK P
  • 【100%通过率 】【华为OD机试 c++/python】查找单入口空闲区域【 2023 Q1

    华为OD机试 题目列表 2023Q1 点这里 2023华为OD机试 刷题指南 点这里 题目描述 给定一个 m x n 的矩阵 由若干字符 X 和 O 构成 X 表示该处已被占据 O 表示该处空闲 请找到最大的单入口空闲区域 解释 空闲区域是
  • [技术经理]01 程序员最优的成长之路是什么?

    00前言 谈起程序员的职业规划 针对大部分的职场人士 最优的成长之路应该是走技术管理路线 而不是走技术专家路线 01关键的一步 中国自古就有 学而优则仕 的传统 发展到今天 在我们的现代企业里面 尤其是在我们的软件企业里面 就演变成了 技而
  • awk 正则表达式、正则运算符详细介绍

    前言 使用awk作为文本处理工具 正则表达式是少不了的 要掌握这个工具的正则表达式使用 其实 我们不必单独去学习它的正则表达式 正则表达式就像一门程序语言 有自己语法规则已经表示意思 对于不同工具 其实大部分表示意思相同的 在linux众多
  • numpy取值大全

    记录numpy取值的所有方法 欢迎 切片操作 整数数组索引 布尔数组索引 布尔数组索引 花式索引 数据结构化取值 欢迎 在NumPy中 可以使用切片 整数数组索引和布尔数组索引来进行取值操作 切片操作 可以使用类似于Python中的切片操作
  • c#之哈希表(Hashtable)

    using System using System Collections Generic using System Collections 哈希表的using引用 using System Linq using System Text u
  • HttpServletRequest request 获取form参数的两种方式

    java view plain copy RequestMapping value pay method RequestMethod POST public String buildRequest HttpServletRequest re
  • 计算机毕业设计ssm基于SSM+Vue的法律咨询信息系统的设计与实现5m1le9 (附源码)轻松不求人

    项目运行 环境配置 Jdk1 8 Tomcat7 0 Mysql HBuilderX Webstorm也行 Eclispe IntelliJ IDEA Eclispe MyEclispe Sts都支持 项目技术 ssm mybatis Ma
  • PHP之hash函数进行SHA256加密的方法

    SHA256加密的方法 function encrypt sha256 str return hash sha256 str SHA256Hex加密 function SHA256Hex str re hash sha256 str tru
  • 阿里实习offer成功上岸,这几点至关重要

    Hello 大家好 欢迎大家来到CSDN云原生计划 考生说 栏目 本期采访的是近期成功获得阿里巴巴暑假实习offer的CSDN云原生专业工程师计划学员的中南大学大三电子信息工程专业的刘贝同学和大家分享成功申请阿里巴巴暑假实习的经验以及面试经
  • 【Mysql】MySQL体系结构,InnoDB、MyISAM存储引擎,索引结构、分类、语法、性能分析

    1 MySQL体系结构 连接层 主要完成一些类似于连接处理 授权认证 及相关的安全方案 在该层上引入了线程池的概念 为通过认证安全接入的客户端提供线程 同样在该层上可以实现基于SSL的安全链接 服务器也会为安全接入的每个客户端验证它所具有的
  • JS实现直接插入排序

    直接插入排序 插入排序的代码实现虽然没有冒泡排序和选择排序那么简单粗暴 但它的原理应该是最容易理解的了 因为只要打过扑克牌的人都应该能够秒懂 插入排序是一种最简单直观的排序算法 它的工作原理是通过构建有序序列 对于未排序数据 在已排序序列中
  • 浅谈BCrypt算法

    文章目录 前言 一 BCrypt算法是什么 二 使用步骤 1 对明文进行加密 2 验证 总结 前言 BCrypt算法是一种基于哈希算法的算法 所以 这种算法是不可逆的 一 BCrypt算法是什么 BCrypt算法是一种基于哈希算法的算法 所
  • 重复代码(克隆代码)的几个概念与类型

    本文内容来源于以下两篇参考文献 1 Chanchal K Roy James R Cordy Rainer Koschke Comparison and Evaluation of Code Clone Detection Techniqu
  • C++中的生命周期

    类A 含构造函数和析构函数 普通函数fun 函数体里新建了类A的局部自动对象FunObj和局部静态对象InStaObj main方法新建了类A的局部自动对象MainObj 调用fun方法 外面新建了A的的外部静态对象ExStaObj和外部对