[C++]C++对象的生存周期
2016-04-11 09:26
225 查看
代码说明:
类A,含构造函数和析构函数
普通函数fun,函数体里新建了类A的局部自动对象
main方法新建了类A的局部自动对象
外面新建了A的的外部静态对象
输出:
若将
创建顺序
外部静态对象or外部对象优先于main函数
销毁顺序
和创建顺序相反,注意静态对象会在main函数执行完才会销毁
从静态存储区分配:此时的内存在程序编译的时候已经分配好,并且在程序的整个运行期间都存在。全局变量,static变量等在此存储
在栈区分配:相关代码执行时创建,执行结束时被自动释放。局部变量在此存储。栈内存分配运算内置于处理器的指令集中,效率高,但容量有限
在堆区分配:动态分配内存。用new/malloc时开辟,delete/free时释放。生存期由用户指定,灵活。但有内存泄露等问题
类A,含构造函数和析构函数
普通函数fun,函数体里新建了类A的局部自动对象
FunObj和局部静态对象
InStaObj
main方法新建了类A的局部自动对象
MainObj,调用
fun方法
外面新建了A的的外部静态对象
ExStaObj和外部对象
GblObj
A GblObj("外部对象GblObj");写在
static A ExStaObj("外部静态对象ExStaObj");前面,则输出时两者顺序也颠倒。
分析
创建顺序外部静态对象or外部对象优先于main函数
销毁顺序
和创建顺序相反,注意静态对象会在main函数执行完才会销毁
内存的三种分配方式
从静态存储区分配:此时的内存在程序编译的时候已经分配好,并且在程序的整个运行期间都存在。全局变量,static变量等在此存储在栈区分配:相关代码执行时创建,执行结束时被自动释放。局部变量在此存储。栈内存分配运算内置于处理器的指令集中,效率高,但容量有限
在堆区分配:动态分配内存。用new/malloc时开辟,delete/free时释放。生存期由用户指定,灵活。但有内存泄露等问题
![](http://www.linuxeden.com/upimg/allimg/160409/0T14L2M-0.png)
相关文章推荐
- C++中的左值和右值
- Effective C++ Item 37 绝不又一次定义继承而来的缺省參数值
- 合并排序的分析
- C/C++程序编译流程
- C++构造函数
- C/C++程序编译流程(预处理->编译->汇编->链接)细讲
- Google C++命名规范
- C语言文件遍历
- C语言时间转换
- C语言函数返回类型为指针时的一些问题
- 利用C语言创建和使用DLL文件
- [温故而知新] 《深度探索c++对象模型》——构造、析构、拷贝的语义
- c++继承详解之一——继承的三种方式、派生类的对象模型
- C++中解析XML tinyXML2
- 大型分布式C++框架《二:大包处理过程》
- c语言基础<5>
- c++第二次作业
- C++实验3-4-多分段函数求值
- C++中了类继承和调用父类的构造函数方法
- C++内存管理