一个例子记住C++对象的生存周期

一个例子记住C++对象的生存周期


最近要考C++,复习过程中遇到一些问题,总结记录一下。文中代码均在ideone在线编译器中运行的。

代码

代码说明:

  • 类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时释放。生存期由用户指定,灵活。但有内存泄露等问题

1 9 收藏 评论

相关文章

可能感兴趣的话题



直接登录
跳到底部
返回顶部