一段程序的分析——C++析构器,何时析构
2014-07-12 09:39
197 查看
最近在看小甲鱼的视频,有段程序是这么写的:
我们现在要分析,析构器合适执行,那我们就重点观测,小动物是何时挂掉的~
小结:
我们发现,小动物是在main函数中,所有代码执行完之后挂掉的~~(其实就是走出大括号,他们的生命就结束了,析构器执行了)
我们还发现,后诞生的小动物,会首先被送走(析构)。(真是“白毛”送“黑毛”啊,呜呜~~)
加上括号之后,jerry_2和Tom_2,在执行“现在还剩。。。”这句之前就挂掉了!
原因在于,jerry_2和Tom_2被“圈养”在一个大括号之内了,那么这个大括号以内就是他们人生的全部了。程序顺序执行,
一旦走出这个“圈圈”,jerry_2和Tom_2就被析构了~~!!
总结:对象何时被析构,就看程序何时走(执行)出,属于对象的“圈”(大括号)。
#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 = 0; // 注意这一句:他起码做了两件事 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 0; }
我们现在要分析,析构器合适执行,那我们就重点观测,小动物是何时挂掉的~
小结:
我们发现,小动物是在main函数中,所有代码执行完之后挂掉的~~(其实就是走出大括号,他们的生命就结束了,析构器执行了)
我们还发现,后诞生的小动物,会首先被送走(析构)。(真是“白毛”送“黑毛”啊,呜呜~~)
加上括号之后,jerry_2和Tom_2,在执行“现在还剩。。。”这句之前就挂掉了!
原因在于,jerry_2和Tom_2被“圈养”在一个大括号之内了,那么这个大括号以内就是他们人生的全部了。程序顺序执行,
一旦走出这个“圈圈”,jerry_2和Tom_2就被析构了~~!!
总结:对象何时被析构,就看程序何时走(执行)出,属于对象的“圈”(大括号)。
相关文章推荐
- 一段C++的程序,指针大小的,以及__LINE__,__FILE__两个宏
- C++反汇编揭秘1 一个简略地C++程序反汇编解释分析
- 如何判断一段程序是由C 编译程序还是由C++编译程序编译的
- 如何判断一段程序是由C编译程序还是由C++编译程序编译的
- C/C++程序从编译到最终生成可执行文件的过程分析
- 利用ANTLR生成C++描述的分析程序
- 判断一段程序是由C 编译程序还是由C++编译程序编译
- 【程序语言】C++ 构造函数 拷贝构造函数 =操作符重载 析构函数 详细分析
- 设计有穷自动机DFA实现C++简单程序的词法分析、扫描(编译原理实验) 推荐
- C/C++程序从编译到最终生成可执行文件的过程分析
- 利用ANTLR生成C++描述的分析程序.doc
- 如何判断一段程序是由C 编译程序还是由C++编译程序编译的
- 在linux(suse)下利用ANTLR生成C++描述的分析程序
- 简单的C++程序 汇编分析
- 关于派生类的构造的——一个程序的分析(钱能c++ P353),加上了析构函数
- 判断一段程序是由C 编译程序还是由C++编译程序编译的
- 请大家推荐好书:通过分析一个较大的程序来学习C++
- 判断一段程序是由C 编译程序还是由C++编译程序编译
- C++小程序 对理解析构和构造函数有帮助(我认为 哈哈~)
- 逆向分析一个完整的C++程序包含寄存器与参数传递详解