C++对象的生存期

不同存储的对象生存期不同。所谓对象的生存期是指对象从被创建开始到被释放为止的时间。
 按生存期的不同对象可分为如下三种:

1、局部对象:当对象被定义时调用构造函数,该对象被创建,当程序退出定义该对象所在的函数体或程序块时,调用析构函数,释放该对象。

2、静态对象:当程序第一次执行所定义的静态对象时,该对象被创建,当程序结束时,该对象被释放。

3、全局对象:当程序开始时,调用构造函数创建该对象,当程序结束时调用析构函数释放该对象。

局部对象是被定义在一个函数体或程序块的,它的作用域小,生存期也短。

静态对象是被定义在一个文件中,它的作用域从定义时起到文件结束时为止,它的作用域比较大,它的生存期也比较大。

#include <iostream>
using namespace std;

int i = 1;            //i为全局变量,具有静态生存期
int main()
{
    static int a;    //a为静态局部变量,具有全局寿命,局部可见
    int b=-10;        //b,c为局部变量,具有动态生存期
    int c=0;        

    void other(void);

    cout <<"-----MAIN------"<<endl;
    cout <<"i="<<i<<"  a="<<a<<"   b="<<b<<"   c="<<c<<endl;

    c=c+8;
    other();
    cout<<"-----MAIN-------"<<endl;
    cout <<"i="<<i<<"  a="<<a<<"   b="<<b<<"   c="<<c<<endl;

    i=i+10;
    other();
    return 0;
    
}

void other(void)
{
    //a,b为静态局部变量,具有全局寿命,局部可见,只第一次进入函数是被初始化
    static int a=2;
    static int b;
            
    int c=10;
    a = a+2;
    i =i+32;
    c = c+5;
    
    cout<<"-----OTHER-----"<<endl;
    cout <<"i="<<i<<"  a="<<a<<"   b="<<b<<"   c="<<c<<endl;
    b=a;

}

运行结果

具有静态、动态生存期对象的时钟程序

#include <iostream>

using namespace std;

class Clock
{
public:
    Clock();
    void SetTime(int NewN,int NewM,int NewS);
    void ShowTime();
    ~Clock(){}
private:
    int Hour,Minute,Second;
};

Clock::Clock()
{
    
}

void Clock::SetTime(int NewN,int NewM,int NewS)
{
    Hour = NewN;
    Minute = NewM;
    Second = NewS;
}

void Clock::ShowTime()
{
    cout <<Hour<<":"<<Minute<<":"<<Second<<endl;
}

Clock globClock;

int main(int argc, char* argv[])
{

    cout<<"First Time Output:"<<endl;

    globClock.ShowTime();
    globClock.SetTime(8,10,15);
    Clock myClock(globClock);

    cout <<"Second Time Output:"<<endl;
    myClock.ShowTime();
    return 0;
}

运行结果:

原文地址:https://www.cnblogs.com/haoyuanyuan/p/3080773.html