• 一段程序的分析——C++析构器,何时析构


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

     1 #include <iostream>
     2 #include <string>
     3 
     4 class Pet
     5 {
     6 public:
     7     Pet(std::string theName);
     8     ~Pet();
     9 
    10     static int getCount();
    11 
    12 protected:
    13     std::string name;
    14 
    15 private:
    16     static int count;
    17 };
    18 
    19 class Dog : public Pet
    20 {
    21 public:
    22     Dog(std::string theName);
    23 };
    24 
    25 class Cat : public Pet
    26 {
    27 public:
    28     Cat(std::string theName);
    29 };
    30 
    31 int Pet::count = 0;         // 注意这一句:他起码做了两件事
    32 
    33 Pet::Pet(std::string theName)
    34 {
    35     name = theName;
    36     count++;
    37 
    38     std::cout << "一只宠物出生了,名字叫做: " << name << "
    ";
    39 }
    40 
    41 Pet::~Pet()
    42 {
    43     count--;
    44     std::cout << name << "挂掉了
    ";
    45 }
    46 
    47 int Pet::getCount()
    48 {
    49     return count;
    50 }
    51 
    52 Dog::Dog(std::string theName) : Pet(theName)
    53 {
    54 }
    55 
    56 Cat::Cat(std::string theName) : Pet(theName)
    57 {
    58 }
    59 
    60 int main()
    61 {
    62     Dog dog("Tom");
    63     Cat cat("Jerry");
    64 
    65     std::cout << "
    已经诞生了" << Pet::getCount() << "只宠物!
    
    ";
    66 
    67     {
    68 
    69         Dog dog_2("Tom_2");
    70         Cat cat_2("Jerry_2");
    71 
    72         std::cout << "
    现在呢,已经诞生了" << Pet::getCount() << "只宠物!
    
    ";
    73 
    74     }
    75 
    76     std::cout << "
    现在还剩下 " << Pet::getCount() << " 只宠物!
    
    ";
    77 
    78     return 0;
    79 }

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

    image

    image

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

    image

    image

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


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

  • 相关阅读:
    SEO网站优化10大要点
    三维翻动效果的jquery特效代码
    多款国外虚拟主机简单比较
    jquery同步调用ajax
    3D虚拟技术
    最简单jquery.ajax+php例子(对话框显示文本框输入内容),以小见大(初学手记)
    正则表达式学习博客
    关于XHTML头部声明,什么是DOCTYPE?
    Iframe高度自适应(兼容IE/Firefox、同域/跨域)
    3D立体产业链的发展现状和趋势
  • 原文地址:https://www.cnblogs.com/douzi2/p/3839642.html
Copyright © 2020-2023  润新知