C++ 对象生命周期
2016-08-25 11:23
726 查看
代码
代码说明:类A,含构造函数和析构函数
普通函数fun,函数体里新建了类A的局部自动对象
FunObj和局部静态对象
InStaObj
main方法新建了类A的局部自动对象
MainObj,调用
fun方法
外面新建了A的的外部静态对象
ExStaObj和外部对象
GblObj
[cpp] view
plain copy
#include <iostream>
#include <string.h>
using namespace std;
class A {
char string[50];
public :
A(char * st);
~A( );
};
A::A(char * st)
{
strcpy(string, st);
cout << string << "被创建时调用构造函数 ! " << endl;
}
A::~A( )
{
cout << string <<
"被撤消时调用析构函数 ! " << endl;
}
void fun( )
{
cout << "在fun( )函数体内 : \n" << endl;
A FunObj("fun( )函数体内的自动对象FunObj");
static A InStaObj("内部静态对象InStaObj");
}
int main( )
{
A MainObj("主函数体内的自动对象MainObj");
cout<<"主函数体内,调用fun()函数前: \n";
fun( );
cout << "\n主函数体内,调用fun()函数后:\n";
return 0;
}
static A ExStaObj("外部静态对象ExStaObj");
A GblObj("外部对象GblObj");
输出:
若将
A GblObj("外部对象GblObj");写在
static A ExStaObj("外部静态对象ExStaObj");前面,则输出时两者顺序也颠倒。
分析
创建顺序外部静态对象or外部对象优先于main函数
销毁顺序
和创建顺序相反,注意静态对象会在main函数执行完才会销毁
内存的三种分配方式
从静态存储区分配:此时的内存在程序编译的时候已经分配好,并且在程序的整个运行期间都存在。全局变量,static变量等在此存储在栈区分配:相关代码执行时创建,执行结束时被自动释放。局部变量在此存储。栈内存分配运算内置于处理器的指令集中,效率高,但容量有限
在堆区分配:动态分配内存。用new/malloc时开辟,delete/free时释放。生存期由用户指定,灵活。但有内存泄露等问题
相关文章推荐
- [C++应用程序性能优化]对象的生命周期
- C++内存布局与对象的生命周期
- C++对象生命周期
- C++ new创建对象生命周期
- C++临时对象的生命周期
- C++:析构函数、对象生命周期、类型转换构造、拷贝构造、拷贝赋值、深浅拷贝
- C++临时性对象的生命周期
- C++线程安全的对象生命周期管理
- C++临时对象的生命周期
- C++临时性对象的生命周期详细解析
- [C++杂记] C++对象的生命周期
- C++ 对象的生命周期
- C++中各种对象的生命周期
- C++ 匿名对象的生命周期
- C++手稿:对象的生命周期,构造与析构
- C++中 简单查看临时对象,局部对象的生命周期,及拷贝构造函数(测试代码)
- c++对象的生命周期
- c++对象的生命周期
- 探讨c++中的临时对象生命周期
- 转载:对象生命周期 C++