最近在看小甲鱼的视频,有段程序是这么写的:

 #include <iostream>
#include <string> class Pet
{
public:
Pet(std::string theName);
~Pet(); static int getCount(); protected:
std::string name; private:
static int count;
}; class Dog : public Pet
{
public:
Dog(std::string theName);
}; class Cat : public Pet
{
public:
Cat(std::string theName);
}; int Pet::count = ; // 注意这一句:他起码做了两件事 Pet::Pet(std::string theName)
{
name = theName;
count++; std::cout << "一只宠物出生了,名字叫做: " << name << "\n";
} Pet::~Pet()
{
count--;
std::cout << name << "挂掉了\n";
} int Pet::getCount()
{
return count;
} Dog::Dog(std::string theName) : Pet(theName)
{
} Cat::Cat(std::string theName) : Pet(theName)
{
} int main()
{
Dog dog("Tom");
Cat cat("Jerry"); std::cout << "\n已经诞生了" << Pet::getCount() << "只宠物!\n\n"; { Dog dog_2("Tom_2");
Cat cat_2("Jerry_2"); std::cout << "\n现在呢,已经诞生了" << Pet::getCount() << "只宠物!\n\n"; } std::cout << "\n现在还剩下 " << Pet::getCount() << " 只宠物!\n\n"; return ;
}

我们现在要分析,析构器合适执行,那我们就重点观测,小动物是何时挂掉的~

小结:
我们发现,小动物是在main函数中,所有代码执行完之后挂掉的~~(其实就是走出大括号,他们的生命就结束了,析构器执行了)
我们还发现,后诞生的小动物,会首先被送走(析构)。(真是“白毛”送“黑毛”啊,呜呜~~)

加上括号之后,jerry_2和Tom_2,在执行“现在还剩。。。”这句之前就挂掉了!
原因在于,jerry_2和Tom_2被“圈养”在一个大括号之内了,那么这个大括号以内就是他们人生的全部了。程序顺序执行,
一旦走出这个“圈圈”,jerry_2和Tom_2就被析构了~~!!

总结:对象何时被析构,就看程序何时走(执行)出,属于对象的“圈”(大括号)。

一段程序的分析——C++析构器,何时析构的更多相关文章

  1. swift 学习- 17 -- 析构器

    // 析构器 只适用与 类类型, 当一个类的实例被释放之前, 析构器会被立即调用, 析构器用关键字 deinit 来标示, 类似于构造器要用 init 来标示 // 析构过程原理 // Swift 会 ...

  2. FFmpeg的HEVC解码器源码简单分析:解析器(Parser)部分

    ===================================================== HEVC源码分析文章列表: [解码 -libavcodec HEVC 解码器] FFmpeg ...

  3. Swift中子类必须包含的构造器和析构器

    import Foundation /* Swift中子类必须包含的构造器 1.Swift允许在父类构造器前添加required关键字, 用于声明所有子类必须包含该required构造器 (如果没有声 ...

  4. keil mdk中如何确保某一段程序不被优化掉(转)

    源:keil mdk中如何确保某一段程序不被优化掉 使用mdk编程,假如有一个有用的函数你定义了但是没有显式的调用,mdk在默认方式下,将会把这个函数从整个程序总删除掉,以节省ROM. 比如,你在RO ...

  5. FFmpeg的HEVC解码器源代码简单分析:解析器(Parser)部分

    ===================================================== HEVC源代码分析文章列表: [解码 -libavcodec HEVC 解码器] FFmpe ...

  6. FFmpeg的H.264解码器源代码简单分析:解析器(Parser)部分

    ===================================================== H.264源代码分析文章列表: [编码 - x264] x264源代码简单分析:概述 x26 ...

  7. 通过反汇编一个简单的C程序,分析汇编代码理解计算机是如何工作的

    实验一:通过反汇编一个简单的C程序,分析汇编代码理解计算机是如何工作的 学号:20135114 姓名:王朝宪 注: 原创作品转载请注明出处   <Linux内核分析>MOOC课程http: ...

  8. 01-Coredump核心转存&&Linux程序地址分析【转】

    转自:http://www.itwendao.com/article/detail/404132.html 目录(?)[-] 一Core Dump核心转存 二Linux程序地址分析 一Core Dum ...

  9. uboot学习之uboot-spl的程序流程分析

    uboot-spl的程序流程主要包含下面的几个函数: _start->reset->save_boot_params->cpu_init_crit->lowlevel_init ...

随机推荐

  1. 利用HTML5和echarts开发大数据展示及大屏炫酷统计系统

    想这样的页面统计及展示系统都是通过echarts来发开的及ajax数据处理,echarts主要是案例,在案例上修改即可,填充数据 echarts的demo案例如下: http://echarts.ba ...

  2. 【前端】NodeJs包管理工具NPM

    NPM是随同NodeJS一起安装的包管理工具,能解决NodeJS部署上的很多问题. 测试是否安装成功,出现版本提示表示安装成功. npm -v NPM常用命令 官方文档:https://www.npm ...

  3. 缓存那些事-zz

    https://tech.meituan.com/cache_about.html 前言 一般而言,现在互联网应用(网站或App)的整体流程,可以概括如图1所示,用户请求从界面(浏览器或App界面)到 ...

  4. .Net WebRequest异步请求与WebClient异步请求

    很多情况下一般会使用同步方式发出请求,直到响应后再做后续的逻辑处理等,但有时候后续的逻辑处理不依赖于请求的结果或者是可以挂起等到响应后再处理,又或者是为了解决UI“假死”的现象,这时可以使用异步请求 ...

  5. Python通过LDAP验证、查找用户(class,logging)

    定义一个类,用于初始化ldap连接,验证.查找用户等功能 # -*- coding: UTF-8 -*- import sys reload(sys) sys.setdefaultencoding(' ...

  6. [cb]NGUI事件及复杂UI管理

    事件管理 看了有些文章关于NGUI的事件管理,许多人的做法的是封装一个事件处理层,避免在每个UI控件上都绑定事件处理脚本.本文说说我们项目中的UI事件管理吧. UIEventListener 我们项目 ...

  7. Linux磁盘空间占满问题快速定位

    1.df -h命令查看系统盘与各个磁盘的占用空间比率 [tidb@:vg_adn_tidbCkhsTest:172.31.30.62 /dev]$df -Th Filesystem Type Size ...

  8. 2879: [Noi2012]美食节

    Description CZ市为了欢迎全国各地的同学,特地举办了一场盛大的美食节.作为一个喜欢尝鲜的美食客,小M自然不愿意错过这场盛宴.他很快就尝遍了美食节所有的美食.然而,尝鲜的欲望是难以满足的.尽 ...

  9. Dig命令解析结果

    dig -t RT NAME @NS -t RT 指定要查询的资源记录类型 NAME 需要解析的域(域名) @NS 指定那个域名服务器负责解析 [root@xss ~]# dig www.ihoney ...

  10. bip32

    https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki RECENT CHANGES: (16 Apr 2013) Added p ...